用另一个对象数组替换对象数组

时间:2017-06-13 08:01:29

标签: javascript ecmascript-6

如何用属性的另一个对象数组替换对象数组?

var arr = [
    {'status':'ok'},
    {'status':'ok'},
    {'status':'error'}
]

var arr2 = [
    {'status':error, 'msg': 'etc', 'more property':true}
]

arr = arr.forEach((obj,i) => { if(obj.status === 'error'){obj = arr2[i]} return obj })

我上面的代码失败了,状态确定没了,我想知道出了什么问题。

4 个答案:

答案 0 :(得分:0)

您可以使用Array#map()创建新数组,Array#find()查找第二个数组中的对象

let arr=[{status:"ok"},{status:"ok"},{status:"error"}],
arr2=[{status:"error",msg:"etc","more property":!0}];

arr = arr.map(a=>{
  let fullObj = arr2.find(a2=>a2.status===a.status);
  return fullObj ? fullObj : a;
});

console.log(arr);

答案 1 :(得分:0)

您可以使用Object.assign为给定对象分配新属性。



var arr = [{ status: 'ok' }, { status: 'ok' }, { status: 'error' }],
    arr2 = [{ status: 'error', msg: 'etc', 'more property': true }];

arr.forEach(obj => {
    if (obj.status === 'error') {
        Object.assign(obj, arr2[0]);
    }
});

console.log(arr);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 2 :(得分:0)

arr = arr.map((obj, i) => obj.status === 'error' ? arr2[i] : obj)

forEach()中的回调可以为索引获取额外的arg,但是您忘了提供它。因此,如果您尝试访问索引,则可以执行此操作。

此外,您将arr分配给forEach的输出,但forEach()不返回任何内容,它只是对数组中的每个元素执行回调。你可以做的是将它换成map,这是类似的,但实际上会返回一个新的数组。

例如:

1e6

答案 3 :(得分:0)

我认为你要做的是将状态为“error”的那个替换为arr2对象[0]所以..

def extractCSVColumnsAndParse[T] = new Extractor[T]

trait Extractor[T] {
  def apply[Repr <: HList](csv: List[String])(implicit labl: LabelledGeneric.Aux[T, Repr], K: Keys[Repr]) = {
    ... // put the logic here
  }
}