2016-02-23 76 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循环快得多的代码(假设两个实现都是正确的并且是最优的)。 –