2016-08-23 5 views
1

lodashを使用すると、重複を削除しないで別の配列から1つの配列を削除できますか?lodashの違いを使用して重複を削除しない

私は現在@hindmostからのコメントに基づいて_.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] 
+1

あなたの問題は非常に曖昧で返します。 1番目の配列からどの要素を削除するべきかは不明です。 '[1,1,2,2,1,2,3,4]、[1、2、3]'という配列を持っているとします。あなたは結果で何を期待していますか? – hindmost

+0

ねえ、良い点。私は2番目の配列の各項目の最初のインスタンスを削除したいと思います。したがって、[1,2,1,2,3,4] – Finnnn

+0

になるでしょう。AFAIK lodashには、このような方法は用意されていません。私は入れ子になったforループを使うことを提案します。 – hindmost

答えて

3

これは私がはい、それがフィルタリングvalues.Iの新しい配列は、Javaスクリプトを試してみました4 _.differenceので、戻り値を返します。純粋な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

を使用しています、私は、ループを使用していました。

var tempArray = [1,1,1,2,2,2,3,3,1,2] 

_.each([1, 2, 3], function(value) { 
    tempArray.splice(tempArray.indexOf(value), 1); 
}); 
1

ことによってそれを行うだろう方法です溶液。それがあなたを助けることを願っています。

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]

+0

このコードは、2番目の配列にある最初の配列から単一の値を削除します。 –

関連する問題