Reputation: 931
I have 2 array of object, just want to check b exist in a, if yes add a new property. but the length of b is dynamic. I will got error of undefined of b.
var a = [{name:'john'},{name:'james'},{name:'jordan'},{name:'joe'}];
var b = [{name:'john'},{name:'joe'}];
var exist = 0;
var c = _.map(a,function(result,i){
exist = b[i].name.indexOf(a.name) > -1 ? exist = 1 : exist = 0;
return _.extend({},c,{'exist':exist});
});
any clue?
Upvotes: 1
Views: 925
Reputation: 2089
I would iterate over b objects and for each of them check if they exists in A, like in the following example.
var a = [ { _id: '5815adb4badf3f311a2cd25b', username: 'david&jane' },
{ _id: '5815e40e136c8e33b65b3478', username: 'david+jane' } ];
var b = [ { username: 'david&jane' },
{ username: 'david<3jane' },
{ username: 'david+jane' },
{ username: 'davidjane' }
]
var c = [];
b.forEach(function(user) {
var exists = false;
for (let i=0; i<a.length && !exists; i++){
exists = a[i].username === user.username ;
}
c.push(Object.assign({},user,{exists}));
});
console.log(c);
Upvotes: 3
Reputation: 318202
You could use Array.every
to check that every object in b
is also in a
, and in the callback you could use Array.some
to check a
for keys and values
var a = [{name:'john'},{name:'james'},{name:'jordan'},{name:'joe'}];
var b = [{name:'john'},{name:'joe'}];
var exist = b.every( (o) => {
let k = Object.keys(o)[0];
return a.some( p => k in p && p[k] === o[k]);
});
console.log(exist)
If you want to add properties, you can do that as well
var a = [{name:'john'},{name:'james'},{name:'jordan'},{name:'joe'}];
var b = [{name:'john'},{name:'joe'}];
var c = b.map( (o) => {
let k = Object.keys(o)[0];
return o.exist = a.some( p => k in p && p[k] === o[k]), o;
});
console.log(c);
Upvotes: 1
Reputation: 19113
First stringify
a
array. Loop through b
and create a dynamic regex to test on a
if the test matches do your stuff.
Hope this helps!
var a = [{name:'john'},{name:'james'},{name:'jordan'},{name:'joe'}];
var b = [{name:'john'},{name:'joe'}, {name:'hello'}];
var strA = JSON.stringify(a)
var result = b.map((el) => {
var elStr = JSON.stringify(el)
var regex = new RegExp(elStr, 'g')
if(regex.test(strA))
return Object.assign({}, el, {exist: 1})
return Object.assign({}, el, {exist: 0})
})
console.log(result)
Upvotes: 1