JavaScript Json值基于等于条件附加

时间:2016-04-25 12:54:59

标签: javascript

我是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);
}
}
}

6 个答案:

答案 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
        }
    }
}

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

答案 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/

我希望我的解决方案能帮到你。谢谢,祝你好运:)