2017-10-13 163 views
0

我有对象的两个数组:搜索对象从对象数组的数组 - 使用Javascript

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'} 
       ] 

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

如果比赛我想,对象的objArray1existing阵列被推动,如果没有匹配,则推该对象在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 objArray2objArray1存在。

+0

请加通缉的结果也是如此。 –

回答

1

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

我在forEach功能

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

+0

你知道我要说什么。 – Cerbrus

+0

在条件下做了小小的调整。根据我的需要。 –

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

+0

你知道我要说什么。 – Cerbrus