我有兩個數組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. 比較兩個數組中的對象並根據javascript中的匹配返回
- 3. 如何比較兩個數組,並找到匹配元素的個數
- 4. 使用Lodash比較對象數組和整數數組
- 5. 比較兩個數組 - 返回不匹配的數組項目
- 6. 比較兩個數組中的元素
- 7. 比較的兩個數組PHP元素
- 8. Python:比較兩個數組的元素
- 9. JavaScript比較,匹配和分配嵌套數組中的對象
- 10. 如何使用lodash將兩個數組合併到對象中
- 11. 比較兩個陣列並打印匹配元素的數量
- 12. 比較兩個數組,並導致匹配的一個
- 13. 如何比較兩個數組,並從兩個數組中不匹配的數組中刪除多個項目?
- 14. 使用.filter比較兩個數組並返回不匹配的值
- 15. 比較兩個數組並替換元素而不重複 - C++
- 16. 如何比較兩個數組對象
- 17. 如何比較兩個對象數組
- 18. 比較兩個關聯數組,並創建匹配的數組新陣列,PHP
- 19. Python:比較兩個數組的所有元素並修改第二個數組
- 20. 比較數組用於匹配的元素
- 21. 匹配兩個數組與HTML元素
- 22. JavaScript - 比較兩個數組與有限的值/元素
- 23. 下劃線/ lodash - 將具有相同元素的對象合併到一起
- 24. 如何比較兩個數組並從下一個循環中刪除匹配的元素?
- 25. 如何比較兩個數組並找到最佳匹配?
- 26. lodash /下劃線找到數組中非唯一元素的數量
- 27. 比較JavaScript中對象的數組
- 28. 比較數組中的對象JavaScript
- 29. 如何比較兩個對象數組中的重複javascript
- 30. 比較對象的兩個數組,並排除誰在JS
['變種C = _.difference(瓶,蘋果);'](https://lodash.com/docs/4.17.4#difference) – 4castle