簡體   English   中英

將對象數組轉換為一個對象的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM