我要删除一个在这种情况下是另一个数组中的数组的元素
arr = [['a','b'],['c','d'],['e','f']];
tag = ['c','d'];
我想从arr删除标签,为此,我正在尝试这样做:
arr.splice(arr.indexOf(tag), 1);
但是我不知道为什么它不起作用,我该怎么办?
答案 0 :(得分:3)
它不起作用,因为JavaScript中的[1, 2, 3] != [1, 2, 3]
。值不完成数组和对象的比较。这也适用于indexOf()
。
您需要告诉javascript平等的含义:
arr = [['a','b'],['c','d'],['e','f']];
tag = ['c','d'];
function array_equals(a, b){
return a.length === b.length && a.every((item,idx) => item === b[idx])
}
console.log(arr.filter(item => !array_equals(item, tag)))
答案 1 :(得分:1)
您需要检查数组中的每个项目,因为使用Array#includes
会检查对象引用,即使具有相同的值,引用也不一样。
假设要检查的数组长度相同。
var arr = [['a', 'b'], ['c', 'd'], ['e', 'f']],
tag = ['c','d'],
result = arr.filter(a => !a.every((v, i) => v === tag[i]));
console.log(result);
答案 2 :(得分:0)
您将需要使用双过滤器。首先是将数组分开,其次是将每个值进行比较并过滤掉标签元素的一个。
arr = [['a','b'],['c','d'],['e','f']];
tag = ['c','d'];
console.log(arr.filter(el=> el.filter((c,i)=> c != tag[i]).length != 0))
答案 3 :(得分:0)
另一种懒惰的选择是,如果所有值都不包含,
,则可以将数组转换并比较为字符串:
var arr = [['a', 'b'], ['c', 'd'], ['e', 'f']], tag = ['c', 'd'];
console.log( arr.filter(a => a != tag + '') )
答案 4 :(得分:0)
这是一个过滤器函数,它从一个数字数组的数组中删除数字 5:
let winComb = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[1, 4, 7],
[2, 5, 8],
[3, 6, 9],
[1, 5, 9],
[3, 5, 7],
];
for (let i = 0; i < winComb.length; i++) {
for (let j = 0; j < 3; j++) {
newArr = winComb[i].filter(function (item) {
return item !== 5;
});
}
console.log(newArr);
}