繁体   English   中英

基于Javascript中的另一个数组删除数组中的元素

[英]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变量,而是使用varlet

 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.

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