如何比较对象内部的值具有不同序列javascript的数组

时间:2016-08-10 12:03:33

标签: javascript angularjs arrays json

我有两个数组,我想在数组中找到匹配的值。但是这些值以不同的顺序出现。如何在纯JavaScript中比较这些值。我想匹配property1和name的值,然后提取property3,其中property1匹配name

代码:

var data = []
var data1 = [
    {'property1': 'john', 'property2': 12}, 
    {'property1': 'jasmin', 'property2': 22}, 
    {'property1': 'dog', 'property2': 22}
]
var data2 = [
    {'name': 'dog', 'property2': 12, 'property3': 'xys'}, 
    {'name': 'john', 'property2': 22, 'property3': 'acb'}, 
    {'name': 'jasmin', 'property2': 22, 'property3': 'jjj'}
]

for(var i=0; i<data1.length; i++){
    if(data1[i].property1 == data2[i].name){
        data.push({
            'property1': data1[i].property1,
            'property2': data1[i].property2,
            'property3': data2[i].property3
        }) 
    } else {
        console.log('not equal')
    }
}

jsfiddle

预期输出

data=[{'property1': 'john', 'property2': 12, 'property3': 'acb'}, 
{'property1': 'jasmin', 'property2': 22, 'property3': 'jjj'}, 
{'property1': 'dog', 'property2': 22, 'property3': 'xys'}]

1 个答案:

答案 0 :(得分:2)

&#13;
&#13;
var data = []
var data1 = [
    {'property1': 'john', 'property2': 12}, 
    {'property1': 'jasmin', 'property2': 22}, 
    {'property1': 'dog', 'property2': 22}
];
var data2 = [
    {'name': 'dog', 'property2': 12, 'property3': 'xys'}, 
    {'name': 'john', 'property2': 22, 'property3': 'acb'}, 
    {'name': 'jasmin', 'property2': 22, 'property3': 'jjj'}
];

data = data1.slice().map(function(el){
    for (var i = 0, l = data2.length; i < l; i++) {
        if (el.property1 === data2[i].name) {
            el.property3 = data2[i].property3;
        }
    }
    return el;
});

console.log(data);
&#13;
&#13;
&#13;

data1.slice().map(...)适用于原始数组的副本,因此在循环中我们不会更改原始数据。