簡體   English   中英

使用對象的屬性作為鍵轉換對象列表中的對象數組

[英]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#assignspread將它們組合到單個對象:

 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.

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