0

I have two arrays where I would like to find matching values inside arrays. But these values occur in different sequence. How can I compare these values in plain JavaScript. I want to match the values of propert1 and name and then extract property3 where property1 matches name

code:

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

expected output

data=[{'property1': 'john', 'property2': 12, 'property3': 'acb'}, 
{'property1': 'jasmin', 'property2': 22, 'property3': 'jjj'}, 
{'property1': 'dog', 'property2': 22, 'property3': 'xys'}]
Imo
  • 1,455
  • 4
  • 28
  • 53
  • 1
    There's nothing like _JSON array_ or _JSON object_. That are just plain old arrays of objects – Andreas Aug 10 '16 at 12:06
  • 2
    what exactly result do you expect (array or true/false)? – Maxx Aug 10 '16 at 12:08
  • The whole object must be the same? Or do you want a single property to match? – tpsilva Aug 10 '16 at 12:13
  • 1
    I believe using the filter could do what you want. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter – cs04iz1 Aug 10 '16 at 12:14
  • I want a single property to be the same. I added more details to the question above – Imo Aug 10 '16 at 12:17

1 Answers1

2

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);

data1.slice().map(...) works on a copy of the original array, so in the loop we don't alter original data.

strah
  • 6,702
  • 4
  • 33
  • 45