[英]How to perform addition of same keys' values of objects and return unique objects from array of objects using javascript?
[英]javascript extract same values of keys from array of objects
我彼此之間有數百個對象,並且每個對象下面都有一個重復的對象結構,其中的對象包含數百個相同的鍵,並且在大多數鍵中,值也相同。
我想做的就是僅在所有對象中都具有相同的鍵和值的情況下,才從該重復的對象中獲取鍵和值,並將其放在包含所有相同的重復鍵/值對的新對象中,同時將其刪除從每個對象中重復的對象中提取。
json對象,例如:
[{
"name": "A",
"values": {
"ab": "abc",
"ac": "1",
"ad": "none"
},
"childs": []
},
{
"name": "A",
"values": {
"ab": "abc",
"ac": "1",
"ad": "none"
},
"childs": [{
"name": "B",
"values": {
"ab": "abc",
"ac": "1",
"ad": "none"
},
"childs": [{
"name": "C",
"values": {
"ab": "abc",
"ac": "1",
"ad": "none"
},
"childs": []
},
{
"name": "C",
"values": {
"ab": "def",
"ac": "1",
"ad": "none"
},
"childs": []
}
]
}]
},
{
"name": "A",
"values": {
"ab": "abc",
"ac": "1",
"ad": "none"
},
"childs": [{
"name": "D",
"values": {
"ab": "abc",
"ac": "1",
"ad": "none"
},
"childs": []
}]
}]
所需的輸出:
[{
"name": "A",
"values": {
"ab": "abc"
},
"childs": []
},
{
"name": "A",
"values": {
"ab": "abc"
},
"childs": [{
"name": "B",
"values": {
"ab": "abc"
},
"childs": [{
"name": "C",
"values": {
"ab": "abc"
},
"childs": []
},
{
"name": "C",
"values": {
"ab": "def"
},
"childs": []
}
]
}]
},
{
"name": "A",
"values": {
"ab": "abc"
},
"childs": [{
"name": "D",
"values": {
"ab": "abc"
},
"childs": []
}]
}]
一個新對象包含因相同而被刪除的鍵/值對:
[{
"ac": "1",
"ad": "none"
}]
我們可以將第一個對象作為鍵值對的起點:
let pairs = Object.entries( objects[0].values );
然后,對於所有值,我們刪除非重復項:
function remove(obj){
pairs = pairs.filter(([key,value]) => obj.values[key] === value);
//the same for all childs:
if(obj.childs) obj.childs.forEach(remove);
}
objects.forEach(remove);
因此,現在我們獲得了每個對象共享的鍵值列表,因此現在我們可以再次構建對象:
const result = {};
for(let [key,value] of pairs) result[key] = value;
我們可以刪除重復項:
function dupes(obj){
pairs.forEach(([key]) => {
if( key in obj.values) delete obj.values[key];
});
if(obj.childs) obj.childs.forEach(dupes);
}
objects.forEach(dupes)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.