繁体   English   中英

从数组数组中删除元素

[英]Remove element from an array of arrays

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

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

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

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

但我不知道为什么它不起作用,我怎么能这样做?

它不起作用,因为[1, 2, 3] != [1, 2, 3]在 javascript 中。 数组和对象的比较不是由值完成的。 这也适用于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)))

您需要检查数组中的每个项目,因为使用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);

您将需要使用双重过滤器。 第一个分隔数组,第二个将比较每个值并过滤掉标签元素。

 arr = [['a','b'],['c','d'],['e','f']]; tag = ['c','d']; console.log(arr.filter(el=> el.filter((c,i)=> c != tag[i]).length != 0))

在更懒惰的替代方案中,如果没有任何值包含, ,则可以将数组转换为字符串并进行比较:

 var arr = [['a', 'b'], ['c', 'd'], ['e', 'f']], tag = ['c', 'd']; console.log( arr.filter(a => a != tag + '') )

这是一个过滤器函数,它从数字数组的数组中删除数字 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); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM