从对象数组中搜索对象数组 - Javascript

时间:2017-10-13 08:05:54

标签: javascript arrays

我有两个对象数组:

var objArray1 = [{'name':'abc', 'phone':'0333'}, 
                {'name':'xyz', 'phone':'0334'},
                {'name':'fgfh', 'phone':'0999'},
                {'name':'abc', 'phone':'0666'},
                {'name':'abc', 'phone':'0444'} 
               ]

var objArray2 = [{'name':'abc', 'mobile':'0333'}, 
                {'name':'xyz', 'mobile':'0334'},
                {'name':'fgfh', 'mobile':'0999'} 
               ]

我想从objArray1搜索objArray2的索引电话

如果匹配,我希望将objArray1对象推送到existing数组中,如果没有匹配,则在joiners数组中推送该对象。

这是我想要做的。

objArray1.forEach(function(item){
    if (objArray2.indexOf(item.phone) < 0) {
        joiners.push(item)
    }else{
        existing.push(item)
    }
})

上面的代码不起作用,并将objArray1的所有对象放入加入者。

当前结果:

joiners = [{'name':'abc', 'phone':'0333'}, 
                {'name':'xyz', 'phone':'0334'},
                {'name':'fgfh', 'phone':'0999'},
                {'name':'abc', 'phone':'0666'},
                {'name':'abc', 'phone':'0444'} 
               ]

通缉结果:

joiners = [{'name':'abc', 'phone':'0666'},
           {'name':'abc', 'phone':'0444'} 
          ]

之后,如果any object of objArray2中不存在objArray1,我想检查反之亦然并制作一系列离职者。

2 个答案:

答案 0 :(得分:1)

您可以使用Array#some功能检查存在。如果条件满足,则返回true,否则falseindexOf通过比较引用进行检查,因为您有不同的对象,您将始终在false语句中获得if

我更改了forEach函数

中的代码

&#13;
&#13;
const objArray1 = [
    {'name':'abc', 'phone':'0333'}, 
    {'name':'xyz', 'phone':'0334'},
    {'name':'fgfh', 'phone':'0999'},
    {'name':'abc', 'phone':'0666'},
    {'name':'abc', 'phone':'0444'}];

const objArray2 = [ 
    {'name':'abc', 'mobile':'0333'}, 
    {'name':'xyz', 'mobile':'0334'},
    {'name':'fgfh', 'mobile':'0999'}];
                
const joiners = [];
const existing = [];

objArray1.forEach(item => 
    objArray2.some(i => i.mobile === item.phone) ? 
    joiners.push(item) : existing.push(item));

console.log(joiners);
console.log(existing);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用哈希表并将其用作推送条件。

var objArray1 = [{ name: 'abc', phone: '0333' }, { name: 'xyz', phone: '0334' }, { name: 'fgfh', phone: '0999' }, { name: 'abc', phone: '0666' }, { name: 'abc', phone: '0444' }],
    objArray2 = [{ name: 'abc', mobile: '0333' }, { name: 'xyz', mobile: '0334' }, { name: 'fgfh', mobile: '0999' }],
    joiners = [],
    existing = [],
    hash = Object.create(null);

objArray2.forEach(function (item) { hash[item.mobile] = true; });

objArray1.forEach(function(item) {
    (hash[item.phone] ? existing : joiners).push(item);
});

console.log(joiners);
console.log(existing);
.as-console-wrapper { max-height: 100% !important; top: 0; }