我有一个数组,其中包含其他已推入的数组。例如:
const Arrays = [ [1,2,3], [4,5,6], [7,8,9], [2,1,3] ];
let myArr = [];
Arrays.map(arr => {
if(myArr.indexOf(arr)){
return
}
myArr.push(arr)
})
const myArr = [ [1,2,3], [4,5,6], [7,8,9], [2,1,3] ];
在此数组中,您可以看到有两个数组具有相同的数字1
,2
和3
。我想以某种方式设定条件说:
如果此阵列已存在,则不要再按任何顺序添加此阵列以防止这种情况发生。因此,当循环中出现这组数字再次出现时,它将跳过它。
答案 0 :(得分:5)
您可以使用some()
和every()
方法检查push()
之前是否已存在相同的数组。
const myArr = [ [1,2,3], [4,5,6], [7,8,9] ];
let input = [2,1,3]
function check(oldArr, newArr) {
return oldArr.some(a => {
return a.length == newArr.length &&
a.every(e => newArr.includes(e))
})
}
if(!check(myArr, input)) myArr.push(input)
console.log(myArr)

答案 1 :(得分:2)
您可以使用sorted element with joined
创建临时数组,然后按indexOf
const myArr = [ [1,2,3], [4,5,6], [7,8,9], [2,1,3],[6,5,4] ];
var newArr = [];
var temp = [];
for(let i in myArr){
let t = myArr[i].sort().join(",");
if(temp.indexOf(t) == -1){
temp.push(t);
newArr.push(myArr[i]);
}
}
console.log(newArr);

答案 2 :(得分:1)
接受的答案不尊重特殊情况,其中数组中只有两个值,并且数组必须检查不同计数中的两个值,如
[1, 1, 2]
和
[1, 2, 2]
是不同的数组。
对于一个有效的解决方案,我建议使用Map
并计算第一个数组相同值的出现次数,并减去另一个数组的值的计数。
结果返回检查Map的所有元素是否为零。
function compare(a, b) {
var map = new Map;
a.forEach(v => map.set(v, (map.get(v) || 0) + 1));
b.forEach(v => map.set(v, (map.get(v) || 0) - 1));
return [...map.values()].every(v => !v);
}
var array = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [2, 1, 3], [1, 1, 2], [1, 2, 2], [2, 1, 1], [2, 1, 2]],
unique = array.reduce((r, a) => (r.some(b => compare(a, b)) || r.push(a), r), []);
console.log(unique);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 3 :(得分:-1)
一种方法是使用.sort()对它们进行数字排序,然后比较它们。