2016-04-25 18 views
1

javascriptを初めて使用しています。私はjsonデータの2つのリストを持っています。私はお互いを繰り返す必要があり、キーと値がお互いに一致する場合は、新しいキー値のペアを最初のリストに追加する必要があります。詳細については、次の例を参照してください:あなたは、オブジェクトのように扱う、あなたの顧客オブジェクトを返しますcustomer[i]としてJavaScript Jsonの値は、等価条件に基づいて追加されます。

customers[i].yourKey = yourValue; 

を使用することができます

Example: 
//array 1 
var customers = [{ 
    CustomerName: 'Customer1', 
}, 
{ 
    CustomerName: 'Customer2', 
}]; 
// array 2 
var locations= [{ 
    CustomerName: 'Customer1', 
    latitude: 555555; 
}, 
{ 
    CustomerName: 'Customer2', 
    latitude: 666666; 
}, 
{ 
    CustomerName: 'Customer3', 
    latitude: 777777; 
}]; 
// Iteration of the arrays 
for(var i=0; i<customers.length; i++){ 
    for(var j=0;j<locations.length;j++) { 
if(customers[i].CustomerName ==locations[j].CustomerName) { 
// Here I want to add an element key value pair into existing array if condition get satisfied 
customers[i].push(locations[j].lat); 
alert(customers[i].lat); 
} 
} 
} 
+0

私はあなたの質問をしていない場合:customers.push({key:value}); –

答えて

0

。 JavaScriptは、そのユーザーにとって素晴らしいものです。

0

あなたの二番目の配列上

customers = customers.map(function(val){ 
    var matchingLocation = locations.filter(function(loc){ 
    return loc.CustomerName = val.CustomerName; 
    }); 
    val.lat = matchingLocation[0].latitude; 
    return val; 
}) 
0

ループこの方法を試してみて、あなたの最初の配列の各オブジェクトと各オブジェクトを比較します

for(var i = 0; i < locations.length; i++){ 
    for(var j = 0; j < customers.length; j++){ 
     if(locations[i].CustomerName == customers[j].CustomerName){ 
      customers[j].latitude = locations[i].latitude 
     } 
    } 
} 

https://jsfiddle.net/opppo7ep/2/

0

をこの提案は2つのArray#forEach()のループで動作します最初に目的の参照を持つオブジェクトを作成し、2番目のループで希望するプロパティをcustomer arに適用しますレイ。

var customers = [{ CustomerName: 'Customer1', }, { CustomerName: 'Customer2', }], 
 
    locations = [{ CustomerName: 'Customer1', latitude: 555555 }, { CustomerName: 'Customer2', latitude: 666666 }, { CustomerName: 'Customer3', latitude: 777777 }], 
 
    object = Object.create(null); 
 

 
locations.forEach(function (a) { 
 
    object[a.CustomerName] = a; 
 
}); 
 

 
customers.forEach(function (a) { 
 
    if (object[a.CustomerName]) { 
 
     a.latitude = object[a.CustomerName].latitude; 
 
    } 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(customers, 0, 4) + '</pre>');

0

あなたの配列(消費者、場所)内のオブジェクトはない配列要素をオブジェクトが含まれています。プッシュコマンドは、アレイのために特別ですが、あなたは、単に配列にあなたのオブジェクトのプロパティを更新することができ、コードを変更することができます。

customers[i]["latitude"] = locations[j].latitude; 

ライブ例:あなたのコードに多少の誤差があること はJsFiddle

0

お知らせ。

まず、 ';'を削除する必要があります。あなたは緯度のnameプロパティを持っている場所(配列2)から、ので、あなたのコードがなければなりません:

var locations = [{ 
    CustomerName: 'c1', 
    latitude: 555555 
}, 
{ 
    CustomerName: 'c2', 
    latitude: 666666 
}, 
{ 
    CustomerName: 'c2', 
    latitude: 666666 
}]; 

顧客や場所は、オブジェクトの配列なので、すべての項目(場所[J]、または顧客[i]があります)はObjectですが、Objectにプッシュ関数がないため、プッシュをObjectに書き込むことはできません。 customers[i].latitude = locations[j].latitude

か、ブラケット表記を使用することができます:

customers[i]['latitude] = locations[j].latitudeをので、既存のJavaScriptに新しいプロパティを追加する

はあなたのようなドット表記を使用することができますオブジェクト。

コードをデバッグするには、キーボードの(CTRL + SHIFT + i)またはF-12をクリックしてChrome開発ツールを使用できます。

あなたはオブジェクトのあなたの配列に対するすべての変更を確認するために

console.log(customers[i]); を使用することができますが、使用する方が簡単です:https://jsfiddle.net/mohammad_daka/sfhqLqan/

debugger;

そしてここでは、あなたの問題に私の解決策コードです

あなたの質問に、あなたのオブジェクトの配列がJSONデータのリストであり、これは当てはまらないことが書かれています。

有効なJavaScriptコードは不要なので、有効なJSON - JavaScript Object Notationです。

しかし、JSONは実際には有効なJavaScriptオブジェクトです。

JSONの名前と値のペアを引用符で囲む必要があるという点で、JavaScript ObjectとJSONの違い。

私はここにあなたのためのJSONについてのすべてを説明した: https://jsfiddle.net/mohammad_daka/fn4024yx/47/

を、私は私の解決策は、あなたを助け願っています。ありがとう、幸運:)