[英]Transform an array of objects in an object list with a property of the object as key
我有一個對象數組,我想在一個對象中將其轉換為對象,其中對象鍵是對象的屬性之一,如:
原始數組的示例:
const myArray = [
{"groupName":"groupname","description":"nice description here","name":"name1","value":107},
{"groupName":"groupname","description":"nice description here","name":"name1","value":107}
]
使用es6漂亮的新功能,Object.assign非常接近我需要的但它為對象分配數字鍵,如:
let newObject = Object.assign({}, myArray);
這給了我一個非常接近的對象,如:
{
"0": {"groupName":"groupname","description":"nice description here","name":"name1","value":107},
"1": {"groupName":"groupname","description":"nice description here","name":"name1","value":107}
}
但我真正需要的是將對象的一個屬性作為鍵而不是分配的數字,例如:
{
"name1": {"groupName":"groupname","description":"nice description here","name":"name1","value":107},
"name2": {"groupName":"groupname","description":"nice description here","name":"name2","value":107}
}
我可以迭代並創建對象,但在使用Object.assign給出一個非常接近的解決方案后,我想知道是否有一種方法在es6中做同樣的事情而不使用forEach或map進行迭代。
想法?
要將數組轉換為具有特定值作為鍵的對象,您需要迭代數組,並構建對象的屬性。
使用Array#reduce “手動”向對象添加屬性:
const myArray = [{"groupName":"groupname","description":"nice description here","name":"name1","value":107}, {"groupName":"groupname","description":"nice description here","name":"name2","value":107}] const result = myArray.reduce((r, o) => (r[o.name] = o, r), {}); console.log(result);
使用Array#map用對象包裝對象中的每個對象,然后使用Object#assign和spread將它們組合到單個對象:
const myArray = [{"groupName":"groupname","description":"nice description here","name":"name1","value":107}, {"groupName":"groupname","description":"nice description here","name":"name2","value":107}] const result = Object.assign({}, ...myArray.map((o) => ({ [o.name]: o }))); console.log(result);
那么,當簡單的操作可以工作時,為什么需要es6和loop形式的map / reduce / forEach。
let myArray = [
{"groupName":"groupname","description":"nice description here","name":"name1","value":107},
{"groupName":"groupname","description":"nice description here","name":"name2","value":108}
]
let newObject ={};
newObject[myArray[0].name] = myArray[0];
newObject[myArray[1].name] = myArray[1];
console.log(newObject);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.