2017-07-17 24 views
-1

我有兩個數組(initialArray和updatedArray),它們都有18個元素。將一個較小的數組(具有鍵值對的對象元素)組合到一個更大的數組中

initialArray中的每個元素都是一個包含5個鍵值對的對象。

initialArray:

[0] 
    head: 'hi', 
    a: '', 
    b: '', 
    c: '', 
    d: '' 
[1] 
    head: 'yo', 
    a: '', 
    b: 'old', 
    c: '', 
    d: '' 
. 
. 
. 

updatedArray就像initialArray但: 1)它不會有所有5個鍵值(僅圖2和3之間,包括頭)。 2)initialArray具有空白或舊值,而updatedArray將被新/填充)3)元素以不同的順序 例如 。

updatedArray:

[0] 
    head:'yo', 
    b: 'bb', 
    d: 'dd' 
[1] 
    head:'hi', 
    b: 'bb', 
    a: 'aa' 
. 
. 
. 

有人能在從updatedArray與鍵值覆蓋initialArray(用「頭」鍵,以配合陣列之間的元素)提供了一些建議。頭部鍵不會被更新,但其他鍵值是。

我會在需要的時候運行這幾次,所以我不能假設initialArray將始終有空白值。如果空白值不會被覆蓋,那麼他們保留在結果如下圖所示:

combinedArray:

[0] 
    head: 'hi', 
    a: 'aa', 
    b: 'bb', 
    c: '', 
    d: '' 
[1] 
    head: 'yo', 
    a: '', 
    b: 'bb', 
    c: '', 
    d: 'dd' 
. 
. 
. 

什麼建議嗎?我目前的嘗試是試圖for循環做一些事情以3:

for (var k in updatedArray){ 
     for (var kk in initialArray){ 
      if(updatedArray[k].head ==initialArray[kk].head){ 
       for (var kkk in updatedArray[k][kk]){ 
        initialArray[k][kk][kkk] = updatedArray[k][kk][kkk]; 
       } 
      } 

     } 
    } 
在這種情況下

,k是指數(0,1),KK是關鍵(頭,A,B等),以及KKK是鍵值的值。儘管這看起來不起作用

回答

0

這就是你需要的。您嘗試訪問第三個循環中的屬性的方式不正確。請參閱下面的代碼。

var initarray = [{ 
 
    head: 'hi', 
 
    a: '', 
 
    b: '', 
 
    c: '', 
 
    d: '' 
 
}, { 
 
    head: 'yo', 
 
    a: '', 
 
    b: 'old', 
 
    c: '', 
 
    d: '' 
 
}] 
 

 
var updatedarray = [{ 
 
    head: 'yo', 
 
    b: 'bb', 
 
    d: 'dd' 
 
}, { 
 
    head: 'hi', 
 
    b: 'bb', 
 
    a: 'aa' 
 
}] 
 

 
for (var k in updatedarray) { 
 
    for (var kk in initarray) { 
 
    if (updatedarray[k].head == initarray[kk].head) { 
 
     for (var kkk in updatedarray[k]) { 
 
     initarray[kk][kkk] = updatedarray[k][kkk]; 
 
     } 
 
    } 
 

 
    } 
 
} 
 

 
console.log(JSON.stringify(initarray)); 
 
//console.log(initarray);

希望這有助於:)

0

編輯:我做了對前面的代碼的改進。這是我能想出的最簡單的解決方案(用於Object.assign爲):

updatedArray.forEach(function(update){ 
    var initial = initialArray.find(x => x.head === update.head); 
    Object.assign(initial, update); 
}); 

請記住,如果updateArray有額外的屬性,他們將被添加。

相關問題