我是javascript的新手。我有两个json数据列表。我需要互相迭代,如果键和值相互匹配,那么我必须在第一个列表中附加一个新的键值对。有关更多详细信息,请参阅以下示例:
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 :(得分:0)
您可以使用
customers[i].yourKey = yourValue;
因为customer[i]
将返回您的客户对象,只需将其视为对象即可。 JavaScript对用户来说很好。
答案 1 :(得分:0)
试试这种方式
customers = customers.map(function(val){
var matchingLocation = locations.filter(function(loc){
return loc.CustomerName = val.CustomerName;
});
val.lat = matchingLocation[0].latitude;
return val;
})
答案 2 :(得分: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
}
}
}
答案 3 :(得分:0)
此提案适用于两个Dave Syer's JavaWorld article: Distributed transactions in Spring, with and without XA循环,首先创建一个包含所需引用的对象,在第二个循环中将所需属性应用于customer
数组。
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>');
答案 4 :(得分:0)
数组中的对象(使用者,位置)包含Object而不是数组元素。 push命令专门用于数组,但您只需更改代码即可更新数组中对象的属性:
customers[i]["latitude"] = locations[j].latitude;
实例: JsFiddle
答案 5 :(得分:0)
请注意您的代码中存在一些错误。
首先你必须删除';'来自位置(数组2),其中您具有纬度的名称属性,因此您的代码必须是:
var locations = [{
CustomerName: 'c1',
latitude: 555555
},
{
CustomerName: 'c2',
latitude: 666666
},
{
CustomerName: 'c2',
latitude: 666666
}];
客户和位置是对象数组,因此每个数组中的每个项目(locations [j]或customers [i])都是一个Object,尽管你不能将push写入Object,因为没有push对象的功能。
因此,要向现有JavaScript对象添加新属性,可以使用点符号,如:
customers[i].latitude = locations[j].latitude
或者您可以使用括号表示法:
customers[i]['latitude] = locations[j].latitude
。
要调试代码,您可以通过点击(CTRL + SHIFT + i)或键盘上的F-12来使用Chrome开发人员工具。
您可以使用
console.log(customers[i]);
查看对象数组的所有更改,但更容易使用:
debugger;
以下是我的问题解决方案代码:https://jsfiddle.net/mohammad_daka/sfhqLqan/
我注意到你在你的问题中写道你的对象数组是一个JSON数据列表,但事实并非如此。
因为有效的JavaScript代码不是有效的JSON - JavaScript Object Notation。
但JSON实际上是一个有效的JavaScript对象。
JavaScript Object和JSON之间的区别在于必须引用JSON名称值对。
我在这里为你解释了关于JSON的一切: https://jsfiddle.net/mohammad_daka/fn4024yx/47/
我希望我的解决方案能帮到你。谢谢,祝你好运:)