2016-12-21 220 views
1

這可能是重複的,但在我搜索的任何地方,我似乎只能找到想要創建對象數組的人。 基本上我試圖達到相反的目的,將對象數組的某些值拉到對象中。它有點扭曲我的頭,所以如果你可以給我一隻手,你們中的任何一個JS大師將會非常感激!從一組對象中創建一個新對象

基本上我有對象的一個​​這樣的數組:

[ 
{ field: 'name', value: 'sam', isRequired: true }, 
{ field: 'email', value: '[email protected]', isRequired: true }, 
{ field: 'message', value: 'hey', isRequired: false }, 
] 

他們分手了這種方式,因爲我經過了驗證字段。

驗證階段我想一個新的對象e.g中映射字段和值屬性名稱值對後:

{ 
name: 'sam', 
email: '[email protected]', 
message: 'hey', 
} 

就像我說的任何幫助將是驚人的!乾杯。

+0

循環:然後合併新對象陣列使用spread syntaxObject#assign到對象。獲取'element.field'和'element.value'並將它們用作結果對象中新屬性的名稱和值。這很難做什麼? – Barmar

+2

'var result = array.reduce((final,obj)=>(final [obj.field] = obj.value,final),{});' –

+0

我猜只是實現,我會用Object.assign和那麼內部的地圖循環呢?另外,如果這是一個重複,請指出原始問題,我找不到它?謝謝 –

回答

2

Array#map陣列中的每個對象到一個新的對象,具有field作爲屬性的關鍵,和值,好了,物業的價值。在陣列中的每個元素

const arr = [ 
 
{ field: 'name', value: 'sam', isRequired: true }, 
 
{ field: 'email', value: '[email protected]', isRequired: true }, 
 
{ field: 'message', value: 'hey', isRequired: false }, 
 
]; 
 
    
 
const result = Object.assign({}, ...arr.map(({ field, value }) => ({ [field]: value }))); 
 

 
console.log(result);

+0

謝謝這是我試圖實現的方法,只是不是這樣關於如何實際實現Object.assign e,g與空對象和spread操作符有關。謝謝! –

1

你可以映射數組對象這樣

var array = [ 
 
{ field: 'name', value: 'sam', isRequired: true }, 
 
{ field: 'email', value: '[email protected]', isRequired: true }, 
 
{ field: 'message', value: 'hey', isRequired: false }, 
 
]; 
 
var object = {}; 
 
array.forEach(x => { 
 
    object[x.field] = x.value; 
 
}); 
 
console.log(object);

相關問題