2016-02-23 131 views
0

我有這樣的JS對象的列表:ES6對象分配部分項目

actualVal = [{pId: a1, pVal: b1}, {pId: a2, pVal: b2}, ....] 

這我就要傳遞給我的功能,我得到它使用ES6爲我的參考:

let { myVal } = actualVal; 

這給了我這樣的:

myVal = [{pId: a1, pVal: b1}, {pId: a2, pVal: b2}, ....] 

是否有ES6辦法讓這個爲:

myVal = [{id: a1, val: b1}, {id: a2, val: b2}, ....] 

我可以通過數組循環來做到這一點,但有沒有辦法映射這個沒有迭代?謝謝!

更新:謝謝大家的答案。那麼哪一個是最有效的方法呢?

回答

2

沒有,但lodash的mapKeys功能可以幫助你做到這一點。另外,如果這就是你的想法,let { myVal } = actualVal將不會創建數組的副本,所以無論如何你需要以另一種方式處理。

actualVal = [{pId: a1, pVal: b1}, {pId: a2, pVal: b2}, ....] 
let newArr = actualVal.map((e, i) => { 
    return _.mapKeys(e, function (val, key) { 
    if (key === 'pId') 
     return 'id' 
    else if 
     // ... 
    } 
+0

是這有效嗎? – kriver

0

您可以使用地圖到您的數組遍歷這樣

myVal.map(val => {return {id: val.pId, val: val.pVal}}) 
0

只有使用陣圖:

myVal = actualVal.map(function(obj) { 
    return { 
     id: obj.pId, 
     val: obj.pVal 
    }; 
}); 
+0

這是否高效? – kriver

+0

數組映射是用本地代碼實現的,它允許執行優化和比JS循環快得多的代碼(假設兩個實現都是正確的並且是最優的)。 –