「JSにオブジェクトの2つの配列をマージする」という質問がたくさんありますが、それらのほとんどを読んでいます。私は何をしようとしていると、いくつかの最も類似 は以下のとおりです。Javascriptオブジェクトの配列を持つSQL完全結合に相当する
How can I merge properties of two JavaScript objects dynamically?
Native javascript - merge two arrays of objects
How to merge two array of objects SQL style JOIN on JSON data
私は完全なSQLをやろうとしているので、私の問題は異なっています配列は異なるサイズになり、新しい列が作成されます。例えば
:
JSON1 = [{Color:"Blue", ID:"15", Size:"Large",Shape:"Square"},
{Color:"Red", ID:"9", Size:"Medium",Shape:"Circle"},
{Color:"Red", ID:"2", Size:"Large",Shape:"Triangle"},
{Color:"Yellow", ID:"3", Size:"Small",Shape:"Square"}];
JSON2 = [{Color:"Blue", Name:"Henry", Inches:"51"},
{Color:"Red", Name:"Jane", Inches:"7"},
{Color:"Pink", Name:"Jack", Inches:"14"}];
所望の出力:だから
OUTPUT =[{Color:"Blue", ID:"15", Size:"Large",Shape:"Square",Name:"Henry", Inches:"51"},
{Color:"Red", ID:"9", Size:"Medium",Shape:"Circle",Name:"Jane", Inches:"7"},
{Color:"Red", ID:"2", Size:"Large",Shape:"Triangle",Name:"Jane", Inches:"7"},
{Color:"Yellow", ID:"3", Size:"Small",Shape:"Square",Name:null, Inches:null},
{Color:"Pink", ID:null, Size:null,Shape:null,Name:"Jack", Inches:"14"}];
、完全なSQLと同様に参加し、私は試合があった場合にマッチした、出力JSONはすべての列を含むようにしたいです、 2番目のJSONのkey:valueペアが最初のオブジェクトのいずれかのオブジェクトのいずれとも一致しない場合は、新しい行が追加されます。
ここまでは以下のとおりです。それは一般的に動作しますが、カップルの問題があります。私は特定の事前定義された値をマージしています。そして、関数がマッチング値がどこにあるのかを知ることはうれしいでしょう。また、JSON2に複数の新しいプロパティ列を追加すると、関数が失敗します(つまり、JSON2にColorとInchesがあり、Color、Inches、およびNameがない場合は機能します)。
var hash={};
for(var e in JSON2){
hash[JSON2[e]["Color"]]= JSON2[e]["Inches"];
}
var trackHash = hash;
for(var k in JSON1){
JSON1[k]["Inches"] = hash[JSON1[k]["Color"]];
if(hash[JSON1[k]["Color"]]===undefined){
delete trackHash[JSON1[k]["Color"]];
}
}
for(var obj in JSON2){
if(trackHash[JSON2[obj]["Color"]]!==undefined){
JSON1.push(JSON2[obj]);
}
}
あなたの質問に* * * JSONが表示されています。あなたの入力と出力はどちらもオブジェクトの配列です。 – nnnnnn
@ Acoustic77まだ答えがあなたの考えを待っている:) – kukkuz
申し訳ありませんが、あなたの答えを見たが、友人は私が線形時間にそれを行うのを手伝うことができたので、私は答えを投稿しようとします – Acoustic77