2016-11-08 54 views
-1

我想通过使用jquery匹配字段来更新另一个数组中数组的属性。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瓦尔领域objnewArray value字段所以结果是这样的

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

难道还有比循环两种阵列,匹配的标识和更新以外的任何其他方式Val地产?

+3

'objArray = objnewArray' – Weedoze

+0

你能告诉我们你如何创建'objnewArray'数组? – Rajesh

+0

两者都是具有不同属性的不同对象。为了简单,我刚才提到了两个属性。 – DotNetLearner

回答

1

你可以使用一个哈希表和循环目标第一和新对象分配到旧的对象。

var objArray = [{ Id: 1, Val: 'A' }, { Id: 3, Val: 'B' }, { Id: 5, Val: 'C' }], 
 
    objnewArray = [{ Id: 1, Value: 'AA', extra: 42 }, { Id: 3, Value: 'BB' }, { Id: 5, Value: 'CC' }], 
 
    hash = Object.create(null); 
 

 
objArray.forEach(function (a) { 
 
    hash[a.id] = a; 
 
}); 
 

 
objnewArray.forEach(function (a) { 
 
    Object.keys(a).forEach(function (k) { 
 
     hash[a.id][k] = a[k]; 
 
    }); 
 
}); 
 

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

ES6与Map

var objArray = [{ Id: 1, Val: 'A' }, { Id: 3, Val: 'B' }, { Id: 5, Val: 'C' }], 
 
    objnewArray = [{ Id: 1, Value: 'AA', extra: 42 }, { Id: 3, Value: 'BB' }, { Id: 5, Value: 'CC' }], 
 
    hash = new Map; 
 

 
objArray.forEach(a => hash.set(a.id, a)); 
 
objnewArray.forEach(a => Object.keys(a).forEach(k => hash.get(a.id)[k] = a[k])); 
 

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

ES6与Array#find

var objArray = [{ Id: 1, Val: 'A' }, { Id: 3, Val: 'B' }, { Id: 5, Val: 'C' }], 
 
    objnewArray = [{ Id: 1, Value: 'AA', extra: 42 }, { Id: 3, Value: 'BB' }, { Id: 5, Value: 'CC' }]; 
 

 
objnewArray.forEach(a => 
 
    Object.keys(a).forEach(k => objArray.find(b => a.id === b.id)[k] = a[k])); 
 

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

0

遍历数组,创建新的键并正确赋值,删除旧的键。你完成了。

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

 

 
var objArray = objnewArray.map(function(el){ 
 
    el.Val = el.Value; // Create new key Val 
 
    delete el.Value; // Delete old key Value 
 
    return el; 
 
}); 
 

 
console.log(objArray);

+0

这将从第二个数组中删除Value属性并添加一个新的property.Right?我的原始阵列完全是两个不同属性的集合,只需用钥匙作为Id – DotNetLearner

0

可以遍历objArray和$。扩展对象

jQuery的 -

objArray = [ { Id: 1, Value: 'A'}, { Id: 3, Value: 'B'}, { Id: 5, Value: 'C'} ]; 
 
objnewArray = [ { Id: 1, Value: 'AA'}, { Id: 3, Value: 'BB'}, { Id: 5, Value: 'CC'} ]; 
 

 
objArrayById = []; 
 

 
objArray.forEach(function(value){ 
 
    objArrayById[value.Id] = value; 
 
}); 
 

 
objnewArray.forEach(function(value,index){ 
 
    objArrayById[value.Id] = $.extend(objArrayById[value.Id],value); 
 
}); 
 

 
console.log(objArrayById);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

ES6

objArray = [ { Id: 1, Value: 'A'}, { Id: 3, Value: 'B'}, { Id: 5, Value: 'C'} ]; 
 
objnewArray = [ { Id: 1, Value: 'AA'}, { Id: 3, Value: 'BB'}, { Id: 5, Value: 'CC'} ]; 
 

 
objArrayById = []; 
 

 
objArray.forEach(function(value){ 
 
    objArrayById[value.Id] = value; 
 
}); 
 

 
objnewArray.forEach(function(value){ 
 
    objArrayById[value.Id] = Object.assign(objArrayById[value.Id],value); 
 
}); 
 

 
console.log(objArrayById);

0

可以使用Array.prototype.reducehash tableObject.assign创建一个浅对象复制到得到所需要的输出数组 - 参见下面的演示:

var objArray = [ { Id: 1, Val: 'A'}, { Id: 3, Val: 'B'}, { Id: 5, Val: 'C'} ]; 
 
var objnewArray = [ { Id: 1, Value: 'AA'}, { Id: 3, Value: 'BB'}, { Id: 5, Value: 'CC'}]; 
 
        
 
var result = objArray.reduce(function(hash){ 
 
    
 
    //create hash table 
 
    objnewArray.forEach(function(element){ 
 
    hash[element.Id]=element.Value; 
 
    }); 
 
    
 
    // reduce to the required result 
 
    return function(prev, curr){ 
 
    var element = Object.assign({}, curr); 
 
    element.Val = hash[curr.Id]; 
 
    prev.push(element); 
 
    return prev; 
 
    } 
 
}(Object.create(null)),[]); 
 

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

+0

@DotNetLearner让我知道(也可以投票!)如果这个答案对你有帮助,谢谢! – kukkuz

0

这是非常相似,通过objArray到@void答案 迭代所以不更新​​对象

var objnewArray = [ { Id: 1, Value: 'AA'}, { Id: 3, Value: 'BB'}, { Id: 5, Value: 'CC'} ]; 
 

 
var objArray = JSON.parse(JSON.stringify(objnewArray)); 
 

 
//console.log(objArray) 
 
objArray = objArray.map(function(doc){ 
 
    doc.Val = doc.Value; 
 
    delete doc.Value; 
 
    return doc; 
 
}); 
 

 
console.log(objArray)

相关问题