Javascript ES6对象分配部分项

Javascript ES6对象分配部分项,javascript,arrays,object,ecmascript-6,assign,Javascript,Arrays,Object,Ecmascript 6,Assign,我有一个js对象列表,如: 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: a

我有一个js对象列表,如:

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}, ....]
我可以通过循环数组来实现这一点,但是有没有一种方法可以在不迭代的情况下映射它呢?谢谢


更新:谢谢大家的回答。那么,哪种方法是最有效的方法呢?

您可以像这样使用map在数组中进行迭代

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

您可以使用map在数组上进行如下迭代

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

没有,但是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 
      // ...
  }

没有,但是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 
      // ...
  }
仅使用数组映射:

myVal = actualVal.map(function(obj) {
    return {
        id: obj.pId,
        val: obj.pVal
    };
});
仅使用数组映射:

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

数组映射是用本机代码实现的,本机代码允许执行优化和比JS循环快得多的代码(假设两种实现都是正确的和优化的)。数组映射是用本机代码实现的,本机代码允许执行优化和比JS循环快得多的代码(假设两种实现都是正确的和最优的)。