[英]Convert array of objects into an array of one object
鑒於此數據格式:
data = {
id_1: [
{ name: "John", key_1: "data 1", key_2: null, key_3: null },
{ name: "John", key_1: null, key_2: "data 2", key_3: null },
{ name: "John", key_1: null, key_2: null, key_3: "data 3" },
],
id_2: [
{ name: "Mary", key_1: "data 1", key_2: null, key_3: null },
{ name: "Mary", key_1: null, key_2: "data 2", key_3: null },
{ name: "Mary", key_1: null, key_2: null, key_3: "data 3" },
],
id_3: [
{ name: "Bob", key_1: "data 1", key_2: null, key_3: null },
{ name: "Bob", key_1: null, key_2: "data 2", key_3: null },
{ name: "Bob", key_1: null, key_2: null, key_3: "data 3" },
],
}
我想將其轉換為這種數據格式:
data = {
id_1: [
{ name: "John", key_1: "data 1", key_2: "data 2", key_3: "data 3" }
],
id_2: [
{ name: "Mary", key_1: "data 1", key_2: "data 2", key_3: "data 3" }
],
id_3: [
{ name: "Bob", key_1: "data 1", key_2: "data 2", key_3: "data 3" }
],
}
在對象內部,將始終只有一個鍵 (key_1/key_2/key_3) 具有值,而其他 2 將始終為空。 它還將始終包含具有相同值的名稱鍵。
關注標題,如果你想將一個數組減少到別的東西,你可以考慮 Array.prototype.reduce() ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /陣列/減少)。
由於您需要對所有對象鍵進行此縮減,因此您可以考慮 Object.keys() ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys )
基於此,您應該能夠找出一種可能的解決方案。
你可以嘗試這樣的事情:
const data = { id_1: [ { name: "John", key_1: "data 1", key_2: null, key_3: null }, { name: "John", key_1: null, key_2: "data 2", key_3: null }, { name: "John", key_1: null, key_2: null, key_3: "data 3" }, ], id_2: [ { name: "Mary", key_1: "data 1", key_2: null, key_3: null }, { name: "Mary", key_1: null, key_2: "data 2", key_3: null }, { name: "Mary", key_1: null, key_2: null, key_3: "data 3" }, ], id_3: [ { name: "Bob", key_1: "data 1", key_2: null, key_3: null }, { name: "Bob", key_1: null, key_2: "data 2", key_3: null }, { name: "Bob", key_1: null, key_2: null, key_3: "data 3" }, ], } function convert(data) { return Object.values(data).forEach( // iterate over values of data object arr => { arr.forEach( // iterate over items in arrays for each id_N item => { Object.entries(item).forEach(([key, value]) => { if (value !== null) { arr[0][key] = value; // collect all non-null values in first item } }) } ) arr.length = 1; } ) } convert(data); // convert data in-place console.log(data);
有用的鏈接:
const reduce = (obj) => {
return Object.entries(obj).reduce((outerAcc,[key, value]) => {
outerAcc[key] = value.reduce((subAcc, subItem) => {
Object.entries(subItem).forEach(([key, value]) => {
subAcc[key] = subAcc[key] || value;
})
return subAcc;
}, {})
return outerAcc;
}, {})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.