JS:遍历一个对象数组以更新对象

3
我尝试循环遍历一个数组对象中的数组对象,对其中的数据进行去重和排序。函数onlyUnique返回一个数组中的唯一值。但问题是,它没有按照预期工作。
arr_lists = [arr_1, arr_2, arr_3, arr_4, arr_5, ...]

for (var list_obj of arr_lists) {
  list_obj = list_obj.join().split(',').filter(onlyUnique);
  list_obj.sort();
  Logger.log(list_obj);
}

日志结果显示为true(即它们是我要找的内容),但原始数组未更改,尽管我认为它应该已更新。

我尝试将筛选后的数组分配给一个新数组...不行。 我知道我可以添加一千行代码来实现结果,但那似乎很愚蠢。

我怀疑这是显而易见的问题。


1
循环内的list_obj = ...重新分配list_obj为一个新数组,因此它不再是数组中一个的引用。因此对该数组进行排序不会对原始数组产生任何影响。 - Robin Zigmond
1
split(',') 创建一个新数组,filter 再次创建一个新数组。你的代码没有对原始数组排序。不相关的问题,但是你为什么要做 .join().split(',') - trincot
@trincot,好问题。说实话,我不知道。在寻找列表中过滤唯一值的简单方法时,我使用了.join().split(',')代码。当时我从未检查过逻辑。 - J. Erik Hartel
1个回答

1
你可以使用Set数据结构来移除数组中的重复元素,再使用Array.sort()比较函数对数组元素进行排序,来简单地实现这一功能。
演示:Live Demo

const arr_lists = [[2,3,5,6], [7,2,5,3,3], [1,5,3], [4,7,4,7,3], [1,2,3]];

arr_lists.forEach((arr, index) => {
  arr_lists[index] = [...new Set(arr)].sort((a, b) => a -b);
})

console.log(arr_lists);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接