2017-03-01 12 views
0

私は状況を次のようしている。Dojo mixinの2つの配列方法は?

を私はこのような変数の配列があります。

[ 
    { 
     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

これを解決する方法の1つは、最初の配列と同じidのエントリから2番目の配列をフィルタリングし、それをオブジェクトの1つの配列に結合することです。

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

ベース配列にもう1つオブジェクトが追加されましたが、これはIDがありません。それに応じてコードを更新しました。{ key: "key"、 値: "value" } ... –

関連する問題