使用lodash,是否可以从另一个数组中删除一个数组,同时避免删除重复项?
我目前正在使用_.difference
// this returns [4]
_.difference([1, 1, 1, 2, 2, 2, 3, 4], [1, 2, 3])
// I want it to return [1, 1, 2, 2, 4]
答案 0 :(得分:3)
这就是我用纯JS做的方式
var arr1 = [1, 1, 1, 2, 2, 2, 3, 4],
arr2 = [1, 2, 3],
result = arr2.reduce((p,c) => {var idx = p.indexOf(c);
return idx === -1 ? p : (p.splice(idx,1),p)}, arr1);
console.log(result);

答案 1 :(得分:1)
根据@hindmost的评论,我使用了一个循环。
var tempArray = [1,1,1,2,2,2,3,3,1,2]
_.each([1, 2, 3], function(value) {
tempArray.splice(tempArray.indexOf(value), 1);
});
答案 2 :(得分:1)
是的,它将返回4因为_.difference
返回新的过滤值数组。我尝试了java脚本解决方案。希望它会对你有所帮助。
function keepDuplicate(array1, array2){
var occur;
var indexes = [];
_.each(array2, function(value){
_.each(array1, function(ar1value, index){
if(value === ar1value){
occur = index;
}
});
indexes.push(occur);
});
_.each(indexes, function(remove, index){
if(index === 0 ){
array1.splice(remove, 1);
}
else{
remove = remove-index;
array1.splice(remove,1);
}
});
return array1;
}
keepDuplicate([1, 1, 1, 2, 2, 2, 3, 4], [1, 2, 3])
它将返回[1, 1, 2, 2, 4]