2017-03-01 63 views
0

我有以下情況:道場mixin兩個陣列如何?

我有一個變量數組這樣的:

[ 
    { 
     id: "foo", 
     value: "bar" 
    }, 
    { 
     id: "baz", 
     value: "buz" 
    } 
] 

和我有一個缺省值陣列是這樣的:

[ 
    { 
     id: "foo", 
     value: "default" 
    }, 
    { 
     id: "bar", 
     value: "default" 
    }, 
    { 
     id: "baz", 
     value: "default" 
    } 
] 

我想這兩個陣列比較並通過將缺少的默認值添加到第一個數組中將它們混合在一起。

這就是我想要的輸出:

[ 
    { 
     id: "foo", 
     value: "bar" // keep unchanged because it was already there 
    }, 
    { 
     id: "bar", 
     value: "default" // use the default because it was not in there 
    }, 
    { 
     id: "baz", 
     value: "buz" // also keep because it was already in the first array 
    } 
] 

什麼是實現這一目標的最好方法是什麼?謝謝你的幫助!

回答

2

如何解決這個問題的方法之一是將第二個數組與第一個數組中相同的id進行過濾,並將其連接到一個對象數組中。

var arr1=[{id:"foo",value:"bar"},{id:"baz",value:"buz"}], 
 
    arr2=[{id:"foo",value:"default"},{id:"bar",value:"default"},{id:"baz",value:"default"}]; 
 

 
    var arr3 = arr2.filter(v => arr1.every(c => c.id != v.id)); 
 
    console.log([...arr1, ...arr3]);

+1

大答案+1 –

0

嗯,這是直接不可能通過使用道場 - lang.mixin ..因爲混入基本上與對象數組的JSON對象istead(你的情況)的交易。

解決方案 -我剛剛寫了一個JavaScript函數,它將返回合併數組。

var baseArray = [{ 
 
      id: "foo", 
 
      value: "bar" 
 
     }, 
 
     { 
 
      id: "baz", 
 
      value: "buz" 
 
     }, 
 
     { 
 
      key: "key", 
 
      value: "value" 
 
     } 
 
    ]; 
 

 
    var defaultArray = [{ 
 
      id: "foo", 
 
      value: "default" 
 
     }, 
 
     { 
 
      id: "bar", 
 
      value: "default" 
 
     }, 
 
     { 
 
      id: "baz", 
 
      value: "default" 
 
     } 
 
    ]; 
 

 
var result = _mixinArrays(baseArray , defaultArray); 
 
console.log(result); 
 

 
function _mixinArrays(a, b){ 
 
    for (var i = 0; i < b.length; i++) { 
 
     var matched = false; 
 
     for (var j = 0; j < a.length; j++) { 
 
      if (b[i].id == a[j].id) {    
 
       matched = true; 
 
      } 
 
     } 
 
     if (!matched) { 
 
      a.push(b[i]); 
 
     } 
 
    } 
 
    return a; 
 
}

希望這將幫助你:)

+0

這個解決方案沒有考慮因素考慮不具有ID,它們應該被添加,以及因爲他們有沒有匹配的對 – chitzui

+0

我在基本數組中添加了一個沒有id的對象..我相應地更新了代碼,因此它也會考慮這個... key:「key」, value:「value」 } ... –