2016-11-08 64 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)

相關問題