Javascript jquery更新来自另一个数组的数组中的属性

Javascript jquery更新来自另一个数组的数组中的属性,javascript,jquery,arrays,Javascript,Jquery,Arrays,我想通过使用jquery匹配字段,从另一个数组更新数组中的属性 objArray = [ { Id: 1, Val: 'A'}, { Id: 3, Val: 'B'}, { Id: 5, Val: 'C'} ]; 在做了一些处理之后,我得到了这样一个数组 objnewArray = [ { Id: 1, Value: 'AA'}, { Id: 3, Value: 'BB'}, { Id: 5, Value: 'CC'} ]; 现在我想将objArray Val字段更新为objnewArray

我想通过使用jquery匹配字段,从另一个数组更新数组中的属性

objArray = [ { Id: 1, Val: 'A'}, { Id: 3, Val: 'B'}, { Id: 5, Val: 'C'} ];
在做了一些处理之后,我得到了这样一个数组

objnewArray = [ { Id: 1, Value: 'AA'}, { Id: 3, Value: 'BB'}, { Id: 5, Value: 'CC'} ];
现在我想将objArray Val字段更新为objnewArray的value字段,结果如下

 objArray = [ { Id: 1, Val: 'AA'}, { Id: 3, Val: 'BB'}, { Id: 5, Val: 'CC'} ];

除了循环两个数组、匹配Id和更新Val属性之外,还有其他方法吗?

遍历数组,创建新键并正确分配其值,删除旧键。你完了

objnewArray=[{Id:1,值:'AA'},{Id:3,值:'BB'},{Id:5,值:'CC'}];
var objArray=objnewArray.map(函数(el){
el.Val=el.Value;//创建新的键Val
delete el.Value;//删除旧键值
返回el;
});

控制台日志(objArray)您可以使用哈希表,首先循环目标,然后循环新对象以分配给旧对象

var objArray=[{Id:1,Val'A'},{Id:3,Val'B'},{Id:5,Val'C'}],
objnewArray=[{Id:1,值:'AA',额外值:42},{Id:3,值:'BB'},{Id:5,值:'CC'}],
hash=Object.create(null);
objArray.forEach(函数(a){
散列[a.id]=a;
});
forEach(函数(a){
Object.keys(a).forEach(函数(k){
散列[a.id][k]=a[k];
});
});
控制台日志(objnewArray)

.as控制台包装{max height:100%!important;top:0;}
您可以迭代objArray和$。扩展对象

Jquery-

objArray=[{Id:1,值:'A'},{Id:3,值:'B'},{Id:5,值:'C'}];
objnewArray=[{Id:1,值:'AA'},{Id:3,值:'BB'},{Id:5,值:'CC'}];
objArrayById=[];
objArray.forEach(函数(值){
objArrayById[value.Id]=值;
});
forEach(函数(值、索引){
objArrayById[value.Id]=$.extend(objArrayById[value.Id],value);
});
console.log(objArrayById)

您可以使用
数组。原型。使用
哈希表和
对象减少
。分配
创建浅层对象副本以获得所需的输出数组-请参阅下面的演示:

var objArray=[{Id:1,Val'A'},{Id:3,Val'B'},{Id:5,Val'C'}];
var objnewArray=[{Id:1,值:'AA'},{Id:3,值:'BB'},{Id:5,值:'CC'}];
var result=objArray.reduce(函数(散列){
//创建哈希表
forEach(函数(元素){
hash[element.Id]=element.Value;
});
//减少到所需的结果
返回函数(上一个、当前){
var元素=Object.assign({},curr);
element.Val=hash[curr.Id];
前推(元件);
返回上一个;
}
}(Object.create(null)),[]);
控制台日志(结果)

.as控制台包装{top:0;最大高度:100%!important;}
这与@void answer非常相似 正在迭代
objArray
以便不更新
objnewArray
对象

var objnewArray=[{Id:1,值:'AA'},{Id:3,值:'BB'},{Id:5,值:'CC'}];
var objArray=JSON.parse(JSON.stringify(objnewArray));
//console.log(objArray)
objArray=objArray.map(函数(doc){
单据价值=单据价值;
删除单据价值;
退货单;
});

console.log(objArray)
objArray=objnewArray
您能告诉我们如何创建
objnewArray
数组吗?两者都是具有不同属性的不同对象。为了简单起见,我刚才提到了两个属性。@DotNetLearner请共享处理原始数据的代码array@DotNetLearner在我的理解中,您应该将其与当前处理一起解析。您可以尝试以下操作:从第二个数组中删除Value属性并添加一个新属性,对吗?我的原始数组是两个完全不同的集合,具有不同的属性,只需将键作为Id@DotNetLearner如果这个答案对你有帮助,请让我知道(也请投赞成票!),谢谢!