[英]Delete elements in an array based on another array in Javascript
我刚刚开始学习 javascript 中的数组方法。 我想根据另一个数组删除数组中的元素。 我尝试了以下方法,但没有得到预期的结果。
const array1 = [1, 2, 3, 4, 5, 6, 7]; const array2 = [2, 4, 5]; array2.forEach(a2 => { array1.filter(a1 => a1 !== a2) }) console.log(array1); // actual output: Array [1,2,3,4,5,6,7]; // expected output: Array [1,3,6,7]
哪种是最适合这里的数组方法?
Array.prototype.filter()
返回一个包含通过测试的元素的新数组。 如果没有元素通过测试,将返回一个空数组。
您必须将返回的值重新分配给数组。 请注意,您不能重新分配const变量,而是使用var或let 。
let array1 = [1, 2, 3, 4, 5, 6, 7]; const array2 = [2, 4, 5]; array2.forEach(a2 => { array1 = array1.filter(a1 => a1 !== a2); }) console.log(array1);
更新:您尝试实现结果的方法存在一些问题。 这里根本不需要使用forEach()
,您可以简单地使用filter()
并在每次迭代中使用includes()
检查当前项目是否在array2 中不存在,如下所示:
let array1 = [1, 2, 3, 4, 5, 6, 7]; const array2 = [2, 4, 5]; const array3 = array1.filter(a1 => !array2.includes(a1)); console.log(array3);
ARRAY.filter
不会改变数组。 如果可能,请使用let
声明array1
,以便您可以重新分配它。 (就像另一个答案一样)
顺便说一下,您可以使用ARRAY.includes(ELEMENT)
来检查ELEMENT
是否在ARRAY
。 因此,您可以将代码简化为:
let array1 = [1, 2, 3, 4, 5, 6, 7];
const array2 = [2, 4, 5];
array1 = array1.filter(a1 => !array2.includes(a1));
console.log(array1);
或者
const array2 = [2, 4, 5];
const array1 = [1, 2, 3, 4, 5, 6, 7].filter(a1 => !array2.includes(a1));
console.log(array1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.