2017-04-02 54 views
0

我在node.js中有一組字段的對象。可以說以功能的方式向js對象添加字段

let arr = [ {a:1,b:2}, {a:3,b:6}] 

我想擴展所有的對象,並分配給一個新的變量。我天真的做法是像下面這樣

let arr2 = arr.map(x => x.c = x.a + x.b) 

然而,箭頭函數返回x.a + x.b價值,而不是x對象,所以我希望這不會工作。它也改變了arr這是非常不起作用和混亂。

我對js比較陌生,所以也許我從一開始就在想錯。這種對象擴展的慣用js表達式是什麼?

回答

3

你可以寫從一個對象到另一個對象的所有屬性與Object.assign

const arr2 = arr.map(x => Object.assign({c: x.a + x.b}, x)); 

也許在未來與對象傳播一些點(尚未標準化):

const arr2 = arr.map(x => ({...x, c: x.a + x.b})); 
+0

不錯!正是我所希望的! :D – LudvigH

1

可以使用這個

let arr2 = arr.map(x => { 
     x.c = x.a + x.b; 
     return x; 
}); 

請同時參考工作代碼

let arr = [ {a:1,b:2}, {a:3,b:6}]; 
 
let arr2 = arr.map(x => { 
 
    return Object.assign({c : x.a + x.b},x); 
 
}); 
 

 

 
console.log(arr); 
 
console.log(arr2); 
 
console.log(arr);

+0

對不起。這將覆蓋'arr',:( – LudvigH

+0

請參閱更新回答 – Dhiraj

+0

oops已經由@Ryan回答了。 – Dhiraj

1

雖然其他的答案大致相同的想法,這可能是稍微更可讀:

arr.map(({a, b}) => ({a, b, c: a + b})) 
+0

mhm我喜歡這一個^ _ ^ – naomik