輸入
data =
[
{ "name": "AAA", "uuid": "111", "zone": "A"},
{ "name": "BBB", "uuid": "222", "zone": "B"},
{ "name": "CCC", "uuid": "333", "zone": "C"},
]
期望的輸出
data =
[
{
"AAA": {"uuid": "111", "zone": "A"},
"BBB": {"uuid": "222", "zone": "B"},
"CCC": {"uuid": "333", "zone": "C"},
}
]
我試過這個,
data =
[
{ "name": "AAA", "uuid": "111", "zone": "A"},
{ "name": "BBB", "uuid": "222", "zone": "B"},
{ "name": "CCC", "uuid": "333", "zone": "C"},
];
data = data.map( o => new Object({"uuid": o.uuid, "zone": o.zone}));
console.log(data);
它給
[
{
uuid: "111",
zone: "A"
}, {
uuid: "222",
zone: "B"
}, {
uuid: "333",
zone: "C"
}
]
我希望“名稱”欄位成為每個物件的鍵。
uj5u.com熱心網友回復:
對應于輸入的輸出部分都在陣列中的單個專案內,因此映射到陣列文字內。映射時提取name屬性,并回傳一個物件,其鍵是該屬性,值是物件中的其余內容(使用rest語法)。
const input = [
{ "name": "AAA", "uuid": "111", "zone": "A"},
{ "name": "BBB", "uuid": "222", "zone": "B"},
{ "name": "CCC", "uuid": "333", "zone": "C"},
];
const output = [input.map(({ name, ...rest }) => ({ [name]: rest }))];
console.log(output);
uj5u.com熱心網友回復:
Array#reduce是另一種迭代陣列的方法。您可以使用名稱作為鍵創建物件
let data = [{ "name": "AAA", "uuid": "111", "zone": "A"},
{ "name": "BBB", "uuid": "222", "zone": "B"},
{ "name": "CCC", "uuid": "333", "zone": "C"}];
data = data.reduce((b,a) => ({...b, [a.name]: {"uuid": a.uuid, "zone": a.zone}}), {});
console.log(data);
輸出:
{
"AAA": {
"uuid": "111",
"zone": "A"
},
"BBB": {
"uuid": "222",
"zone": "B"
},
"CCC": {
"uuid": "333",
"zone": "C"
}
}
uj5u.com熱心網友回復:
您可以使用物件解構語法輕松完成此操作。
使用您的原始資料:
let data = [
{ "name": "AAA", "uuid": "111", "zone": "A" },
{ "name": "BBB", "uuid": "222", "zone": "B" },
{ "name": "CCC", "uuid": "333", "zone": "C" }
];
創建一個新物件來保存我們的重組資料:
let records = {};
name在這里,我們通過將屬性分配給它自己的變數并將其余屬性分配給r使用擴展運算子( ...)的新物件來解構每個資料物件。然后我們可以使用括號表示法將資料records按名稱分配給物件:
data.forEach(({ name, ...r }) => records[name] = r);
如果我們檢查records物件:
console.log(records);
{
AAA: {
uuid: "111",
zone: "A"
},
BBB: {
uuid: "222",
zone: "B"
},
CCC: {
uuid: "333",
zone: "C"
}
}
records不是陣列,不能通過索引訪問。
console.log(records[0]); // undefined
但現在可以按鍵參考:
console.log(records['AAA']); // { uuid: "111", zone: "A" }
console.log(records.BBB); // { uuid: "222", zone: "B" }
如果您絕對希望您的資料作為嵌套在陣列中的物件:
data = [records];
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/456228.html
標籤:javascript json 字典 减少
