我有兩個數組apple = [1,5,10,15,20]
,bottle = [1,5,10,15,20,25]
使用lodash或任何JavaScript函數,我想要一個數組c與唯一元素c= [25]
。更確切地說,當'apple'數組與'bottle'數組進行比較時,我需要所有元素的列表,以顯示唯一的元素/比較兩個對象的數組javascript並將不匹配的數組元素使用下劃線或lodash
-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
你可以使用Array#filter
與對面陣列的Set
。
該建議使用complement函數,如果元素a不在集合b中,則返回true
。
對於對稱差異,必須在雙方都使用回調過濾。
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 /下劃線/ lodash:在對象數組比較對象並取出匹配的對象
- 2. 比較兩個數組並刪除不匹配的對象
- 3. 獨特的對象數組和合並重復使用lodash或下劃線
- 4. 比較兩個數組中的對象並根據javascript中的匹配返回
- 5. 如何比較兩個數組,並找到匹配元素的個數
- 6. 使用Lodash比較對象數組和整數數組
- 7. 比較兩個數組的匹配值
- 8. 比較兩個數組 - 返回不匹配的數組項目
- 9. 下劃線從對象的元素創建對象數組
- 10. 比較的兩個數組PHP元素
- 11. Python:比較兩個數組的元素
- 12. 比較兩個數組中的元素
- 13. JavaScript比較,匹配和分配嵌套數組中的對象
- 14. 比較兩個陣列並打印匹配元素的數量
- 15. JavaScript的比較兩個數組對象的不同
- 16. 比較兩個數組,並導致匹配的一個
- 17. Javascript對象數組比較
- 18. 如何比較兩個數組,並從兩個數組中不匹配的數組中刪除多個項目?
- 19. 比較兩個JavaScript數組?
- 20. 如何比較兩個動態數組並檢查哪些元素匹配?
- 21. 如何使用lodash或下劃線刪除兩個數組中的相同對象?
- 22. 如何比較兩個數組並顯示列中的匹配
- 23. 使用javascript比較兩個數組
- 24. 比較兩個數組並找到匹配值並打印
- 25. 使用.filter比較兩個數組並返回不匹配的值
- 26. 比較兩個數組並替換元素而不重複 - C++
- 27. 如何突破對象數組分成2個陣列,使用下劃線/ LoDash
- 28. 如何比較兩個對象數組?
- 29. 如何比較兩個對象數組
- 30. 遞歸比較兩個對象數組
['變種C = _.difference(瓶,蘋果);'](https://lodash.com/docs/4.17.4#difference) – 4castle