私は2つの配列apple = [1,5,10,15,20]
,bottle = [1,5,10,15,20,25]
を使ってロダッシュまたは任意のjavascript関数を使用しています。より正確に言えば、 'apple'配列と 'bottle'配列を比較すると、すべての要素のリストが必要です。/オブジェクトの2つの配列javascriptを比較し、不一致の配列要素をアンダースコアまたはロダッシュを使用して新しい配列にスローする
-2
A
答えて
1
reduce()
とfilter()
という独自の関数を作成することができます。
var apple = [1,5,10,15,20], bottle = [1,5,10,15,20,25]
function diff(a1, a2) {
//Concat array2 to array1 to create one array, and then use reduce on that array to return
//one object as result where key is element and value is number of occurrences of that element
var obj = a1.concat(a2).reduce(function(result, element) {
result[element] = (result[element] || 0) + 1
return result
}, {})
//Then as function result return keys from previous object where value is == 1 which means that
// that element is unique in both arrays.
return Object.keys(obj).filter(function(element) {
return obj[element] == 1
})
}
console.log(diff(apple, bottle))
ES6矢印関数で同じコードのより短いバージョン。
var apple = [1,5,10,15,20], bottle = [1,5,10,15,20,25]
function diff(a1, a2) {
var obj = a1.concat(a2).reduce((r, e) => (r[e] = (r[e] || 0) + 1, r), {})
return Object.keys(obj).filter(e => obj[e] == 1)
}
console.log(diff(apple, bottle))
+0
はおそらく書きたいですもう少し自己文書化するコード.. – mhodges
+1
@mhodges私は私の答えを更新しました。 –
1
あなたは反対の配列のSet
でArray#filter
を使用することができます。
この提案では、要素aがセットbにない場合はtrue
を返す関数complementを使用します。
対称的な違いについては、コールバックによるフィルタリングを両側で使用する必要があります。
function getComplement(collection) {
// initialize and close over a set created from the collection passed in
var set = new Set(collection);
// return iterator callback for .filter()
return function (item) {
return !set.has(item);
};
}
var apple = [1,5,10,15,20],
bottle = [1,5,10,15,20,25],
unique = [
...apple.filter(getComplement(bottle)),
...bottle.filter(getComplement(apple))
];
console.log(unique);
関連する問題
- 1. Javascriptを - 私は、オブジェクトのこの配列を持つオブジェクトの配列を比較し、一致する値に
- 2. 2つの配列の要素を比較します
- 3. 2つの配列を比較し、配列がもう一致しないインデックスを見つけます。
- 4. 2つの配列のオブジェクトを比較し、javascriptでの一致に基づいて返します
- 5. 配列とjavascript - 2つの配列を比較する方法
- 6. 配列のオブジェクトを比較して、私は2つの配列を持っているのJavaScript
- 7. 、要素に2つの配列を比較し、ゼロ
- 8. は、配列に応じて2つの配列を比較します
- 9. 2つの配列を比較し、等しいオブジェクトを新しい配列に入れよう
- 10. 新しい配列の配列として配列の2つの配列を連続して配列する
- 11. 配列要素の比較
- 12. .filterを使用して2つの配列を比較し、一致しない戻り値を返します。
- 13. 2つの配列を比較し、一致しない要素のみをポストグルで選択する方法
- 14. javascript配列とオブジェクトの配列を比較する
- 15. 配列内の2つのオブジェクト値を比較しますか?
- 16. 2つのオブジェクトの配列を比較する方法javascript
- 17. PHPの配列の2つの列を比較しますか?
- 18. は、2つのオブジェクトの配列を比較し、フィルタは
- 19. 2つの配列 - 一致しない配列の項目を返します
- 20. 2次元配列配列の要素は比較されません。配列全体を比較しようとしていません
- 21. PHPは2つの配列を比較して、一致した値を違いなしで取得します
- 22. ある配列の要素と別の配列の要素を比較する
- 23. 私は2つのアレイ持ちの配列を比較して、配列
- 24. 2つの配列要素を結合するか、または1つの配列要素を別の配列要素に分配しますか?
- 25. 配列のインデックス値を比較して新しい配列を返す
- 26. 他の配列を使用して配列オブジェクトをフィルタリングするアンダースコア
- 27. 2つの配列をJavascriptで比較し、booleanを返す
- 28. JavaScript他の配列と比較して配列の一致するメンバーを置換する
- 29. 配列の比較と新しい配列の作成Android SDK
- 30. 配列を配列の配列と比較するには?
[ 'VARのC = _.difference(ボトル、リンゴ);'](https://lodash.com/docs/4.17.4#difference) – 4castle