不使用lodash差异删除重复项

时间:2016-08-23 09:52:19

标签: javascript arrays lodash

使用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]

3 个答案:

答案 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]