Roh*_*hit 5 javascript arrays unique set filter
我正在尝试构建唯一的数组数组,这样每当我有新数组添加它时,只应添加它,如果它不存在于集合中
例如,存储[1,1,2]的所有唯一排列
实际:[[1,1,2],[1,2,1],[1,1,2],[1,2,1],[2,1,1],[2,1,1]]
预期:[[1,1,2],[1,2,1],[2,1,1]]
我试过的方法:
uniqueArrComparer都是对该数组元素的唯一对象引用.function uniqueArrComparer(value, index, self) {
return self.indexOf(value) === index;
}
result.filter(uniqueArrComparer)
Run Code Online (Sandbox Code Playgroud)
设置/映射:我认为我可以构建一个唯一的数组,但它不起作用,因为Set内部使用了严格的相等比较器(===),它将在这种情况下将每个数组视为唯一.
我们无法为JavaScript Set自定义对象相等性
将每个数组元素作为字符串存储在Set/Map/Array中,并构建一个唯一字符串数组.在最后使用唯一字符串数组构建数组数组.这种方法可行,但看起来不是有效的解决方案.
let result = new Set();
// Store [1,1,2] as "1,1,2"
result.add(permutation.toString());
return Array.from(result)
.map(function(permutationStr) {
return permutationStr
.split(",")
.map(function(value) {
return parseInt(value, 10);
});
});Run Code Online (Sandbox Code Playgroud)
这个问题比任何应用程序问题更像是一种学习练习.
一种方法是将数组转换为JSON字符串,然后使用Set获取唯一值,然后再转换回来
var arr = [
[1, 1, 2],
[1, 2, 1],
[1, 1, 2],
[1, 2, 1],
[2, 1, 1],
[2, 1, 1]
];
let set = new Set(arr.map(JSON.stringify));
let arr2 = Array.from(set).map(JSON.parse);
console.log(arr2)Run Code Online (Sandbox Code Playgroud)