从数组数组中删除元素

时间:2018-06-23 19:19:57

标签: javascript arrays

我要删除一个在这种情况下是另一个数组中的数组的元素

arr = [['a','b'],['c','d'],['e','f']];
tag = ['c','d'];

我想从arr删除标签,为此,我正在尝试这样做:

arr.splice(arr.indexOf(tag), 1);

但是我不知道为什么它不起作用,我该怎么办?

5 个答案:

答案 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);
}