2017-10-13 215 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