如何用属性的另一个对象数组替换对象数组?
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 })
我上面的代码失败了,状态确定没了,我想知道出了什么问题。
答案 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
}
}