[英]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.