2017-04-09 21 views
0

2つの多次元配列があり、これを共通の一致タグのみを含む単一のデータソースにマージしたいと考えています。共通の一致要素を持つ2つの多次元配列をマージするJavaScript

// jsfiddle http://jsfiddle.net/Qh9X5/10173/

//アレイ1

var array1 = [{ 
      "Skills & Expertise": [{ 
       "id": 2, 
       "tag": "Javascript" 
      }, { 
       "id": 3, 
       "tag": "Design" 
      }], 
      "Location": [{ 
       "id": 0, 
       "tag": "London" 
      }, { 
       "id": 1, 
       "tag": "Germany" 
      }], 
      "Company": [{ 
       "id": 0, 
       "tag": "Cheesestrings" 
      }] 
}]; 

//アレイ2

var array2 = [{ 
      "Skills & Expertise": [{ 
       "id": 0, 
       "tag": "JAVA" 
      }, { 
       "id": 1, 
       "tag": "PHP" 
      }, { 
       "id": 2, 
       "tag": "Javascript" 
      }], 
      "Location": [{ 
       "id": 0, 
       "tag": "London" 
      }], 
      "Company": [{ 
       "id": 0, 
       "tag": "Cheesestrings" 
      }, { 
       "id": 1, 
       "tag": "Bakerlight" 
      }] 
      }] 

ので、結果は、この

//所望の結果のようになります

var array3 = [{ 
       "Skills & Expertise": [{ 
        "id": 2, 
        "tag": "Javascript" 
       }], 
       "Location": [{ 
        "id": 0, 
        "tag": "London" 
       }], 
       "Company": [{ 
        "id": 0, 
        "tag": "Cheesestrings" 
       }] 
    }]; 

連絡先を使用して両方の配列をマージしてから、両方に存在しない要素を削除することから始めますか?

var array3 = array1.concat(array2); // Merges both arrays 

答えて

1

あなたは、配列項目を反映したハッシュテーブルを使用してハッシュし、結果セットを取得するために、ネストされたアプローチを使用することができます。

var array1 = [{ "Skills & Expertise": [{ id: 2, tag: "Javascript" }, { id: 3, tag: "Design" }], Location: [{ id: 0, tag: "London" }, { id: 1, tag: "Germany" }], Company: [{ id: 0, tag: "Cheesestrings" }] }], 
 
    array2 = [{ "Skills & Expertise": [{ id: 0, tag: "JAVA" }, { id: 1, tag: "PHP" }, { id: 2, tag: "Javascript" }], Location: [{ id: 0, tag: "London" }], Company: [{ id: 0, tag: "Cheesestrings" }, { id: 1, tag: "Bakerlight" }] }], 
 
    hash = [], 
 
    result; 
 

 
array1.forEach(function (o, i) { 
 
    Object.keys(o).forEach(function (k) { 
 
     o[k].forEach(function (a) { 
 
      hash[i] = hash[i] || {}; 
 
      hash[i][[k, a.tag].join('|')] = true; 
 
     }); 
 
    }); 
 
}); 
 

 
result = array2.map(function (o, i) { 
 
    var temp = {}; 
 
    Object.keys(o).forEach(function (k) { 
 
     o[k].forEach(function (a) { 
 
      if ((hash[i] || {})[[k, a.tag].join('|')]) { 
 
       temp[k] = temp[k] || []; 
 
       temp[k].push(a); 
 
      } 
 
     }); 
 
    }); 
 
    return temp; 
 
}); 
 

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

+0

こんにちは@Ninaショルツあなたは多分解決に役立つ可能性があり、別の問題を抱えている - http://stackoverflow.com/questions/43415966/d3-js-chemical-tube-bar-chart/43461927 #43461927 –

関連する問題