繁体   English   中英

javascript:如果一个值在另一个数组中,则仅删除一次该值

[英]javascript: remove only one time a value in an array if it is in another array

所以我一直在尝试删除arrayB中arrayA的数字。 但是,如果某个数字在该arrayB中只有一次,并且在该arrayA中超过一次,我希望我的函数仅删除其中一个。

我的函数看起来可以正常工作,但不能...

预期输出为:1,3,3,4,5

 let arrayA = [1,1,2,3,3,3,4,4,5] let arrayB = [1,2,3,4] function remove(arrayB,arrayA){ //newarray is the result array i want to get let newarray = []; //counter will controll if a number is more than one time in my arrayA let counter = []; arrayA.forEach(function(n){ //if a number of my arrayA is not in my arrayB if(arrayB.indexOf(n) == -1){ newarray.push(n); } //if a number of my arrayB is only one time in my arrayA else if(a.indexOf(n) == a.lastIndexOf(n)){ } //if a number is more than one time but its the first one we meet else if(a.indexOf(n) !== a.lastIndexOf(n) && counter.includes(n) == false){ //push it into the counter array so we'll know we already had this number counter.push(n) } // if it's the second time we have to keep it and get it in the newarray else { newarray.push(n); } }) document.write(newarray) } 

一个循环就足够了。 循环arrayB并从arrayA中删除找到的元素。 indexOf将始终在第一次命中时停止,这使得它相当简单:

 let arrayA = [1,1,2,3,3,3,4,4,5]; let arrayB = [1,2,3,4]; arrayB.forEach(e => arrayA.splice(arrayA.indexOf(e), 1)); console.log(arrayA); 

您可以遍历arrayB并在arrayA中删除相同的值:

 var arrayA = [1,1,2,3,3,3,4,4,5]; var arrayB = [1,2,3,4]; arrayB.forEach(b => { var index = arrayA.findIndex(a => a === b); arrayA = [ ...arrayA.slice(0, index), ...arrayA.slice(index + 1)]; }); console.log(arrayA); 

您可以使用一个哈希表,并计算不想要的项目的出现次数。

 var arrayA = [1, 1, 2, 3, 3, 3, 4, 4, 5], arrayB = [1, 2, 3, 4], hash = arrayB.reduce((o, v) => (o[v] = (o[v] || 0) + 1, o), Object.create(null)); console.log(arrayA.filter(v => !hash[v] || !hash[v]--)); 

对于给定的排序数组,可以使用索引作为arrayB闭包。

 var arrayA = [1, 1, 2, 3, 3, 3, 4, 4, 5], arrayB = [1, 2, 3, 4]; console.log(arrayA.filter((i => v => v !== arrayB[i] || !++i)(0))); 

暂无
暂无

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

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