简体   繁体   English

检查对象值数组是否在另一个数组中但长度不同

[英]Check if array of object value exist in another array but different length

I have 2 array of object, just want to check b exist in a, if yes add a new property. 我有2个对象数组,只想检查b是否存在于a中,如果是,则添加一个新属性。 but the length of b is dynamic. 但是b的长度是动态的。 I will got error of undefined of b. 我将得到b的undefined错误。

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? 有什么线索吗?

I would iterate over b objects and for each of them check if they exists in A, like in the following example. 我将遍历b个对象,并针对每个对象检查它们是否存在于A中,如以下示例所示。

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

First stringify a array. 首先a数组stringify Loop through b and create a dynamic regex to test on a if the test matches do your stuff. 遍历b并创建一个动态正则表达式以测试a是否符合您的要求。

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) 

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 您可以使用Array.every检查b中的每个对象是否也在a ,并且在回调中可以使用Array.some检查a中的键和值

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM