簡體   English   中英

將 object 轉換為單個鍵/值對象的數組

[英]Transform an object into an array of single key/value objects

我有這個變量:

let json1 = 
{'aaa': {'cus1':1,'cus2':2},
 'bbb': {'cus3':1,'cus4':5}
}

我想將其轉換為以下數組:

[{'aaa': {'cus1':1,'cus2':2}},
 {'bbb': {'cus3':1,'cus4':5}}
]

我試圖做的是:

let arr = [];
let keys = Object.keys(json1);
keys.reduce((acc, key) => {
        acc.push({key: json1[key]});
        return acc;
    }, arr);

當我得到:

[ { key: { cus1: 1, cus2: 2 } }, { key: { cus3: 1, cus4: 5 } } ]

所以顯然我想使用真正的密鑰而不是key作為我在arr中封裝的json的密鑰。

PS有沒有辦法在不使用for循環的情況下做到這一點?

你的問題在這里:

acc.push({key: json1[key]});
//        ^
//        here

在這種情況下, key實際上是屬性的名稱。 但是,您正在尋找的是評估key作為您的屬性的名稱(又名計算的屬性名稱):

acc.push({[key]: json1[key]});
//        ^
//        now your property name is whatever `key` value is

一個簡單的例子:

var key = '🌯';
var obj = {[key]: true};

obj;
//=> { "🌯": true }

現在回答你的問題:

const split =
  obj =>
    Object.entries(obj)
      .map(([k, v]) =>
        ({[k]: v}));

split({ aaa: {cus1: 1, cus2: 2}
      , bbb: {cus3: 1, cus4: 5}
      });

//=> [ { aaa: {cus1: 1, cus2: 2} }
//=> , { bbb: {cus3: 1, cus4: 5} }
//=> ]

您可以使用給定的鍵將分離的鍵/值對帶到新的 object 中。

 const data = { aaa: { cus1: 1, cus2: 2 }, bbb: { cus3: 1, cus4: 5 } }, array = Object.entries(data).map(([k, v]) => ({ [k]: v })); console.log(array);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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