2016-11-30 33 views
2

如何查找Array2 in Array1。我一直在使用$ .inArray()方法或indexOf()但它返回false但聲明爲真。查找對象陣列中的整個對象

var array1 = [{ 
    h: 1480508328, 
    rid: 16, 
    sid: 2 
    }, { 
    h: 87542, 
    rid: 18, 
    sid: 9 
    } 
]; 
var array2 = { 
    h: 1480508328, 
    rid: 16, 
    sid: 2 
}; 
//test if array2 exist in array1 
if ($.inArray(array2, array1) > 0) { 
    console.log('Object is in array'); 
} else { 
    console.log('Object is not in array'); 
} 

請幫忙。謝謝

+5

FYI,'array2'不是數組。這是一個對象。 'array2'也不在'array1'中,只有*看起來像'array2'的對象。所以你必須[迭代'array1'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for),並檢查是否有任何項目匹配'array2'。 –

+0

但var array1是一個關聯數組(value pare)....不是嗎? –

+1

好吧。 [引用](http://www.w3schools.com/js/js_arrays.asp):「JavaScript不支持具有命名索引的數組,在JavaScript中,數組總是使用編號索引。」* – yuvi

回答

4

你可以遍歷數組,並檢查屬性的長度與給定對象的長度和檢查每個值。

var array = [{ h: 1480508328, rid: 16, sid: 2 }, { h: 87542, rid: 18, sid: 9 }], 
 
    object = { h: 1480508328, rid: 16, sid: 2 }, 
 
    found = array.some(function (a) { 
 
     var keys = Object.keys(a); 
 
     return keys.length === Object.keys(object).length && keys.every(function (k) { 
 
      return a[k] === object[k]; 
 
     }); 
 
    }); 
 
    
 
console.log(found);

var array = [{ h: 87542, rid: 18, sid: 9 }, { h: 1480508328, rid: 16, sid: 2 }], 
 
    object = { h: 1480508328, rid: 16, sid: 2 }, 
 
    found = array.some(function (a) { 
 
     var keys = Object.keys(a); 
 
     return keys.length === Object.keys(object).length && keys.every(function (k) { 
 
      return a[k] === object[k]; 
 
     }); 
 
    }); 
 
    
 
console.log(found);

+0

我認爲你的答案是最好的解決方案 –

+0

如果排序不一樣,yuvi提供的答案會有很大的問題。一個元素可以在位置1找到,而不是位置0 –

+0

那麼我該如何返回找到的物品的位置? –

1

可以字符串化,並檢查是否相等

var array1 = [{ 
    h: 1480508328, 
    rid: 16, 
    sid: 2 
    }, { 
    h: 87542, 
    rid: 18, 
    sid: 9 
    } 
]; 
var array2 = { 
    h: 1480508328, 
    rid: 16, 
    sid: 2 
}; 

var dat1 = JSON.stringify(array2); 
array1.forEach(function(item){ 
    if(JSON.stringify(item) === dat1){ 
     console.log(dat1) 
    } else { 
     console.log('Not match') 
    } 
}); 

JSFIDDLE

+5

注意:如果對象的屬性排序不同,可能會出現問題。 –

+0

由於某種原因幫助我的項目我選擇你的答案 –

+0

非常感謝。 –

3

使用Array.prototype.every檢查數組和對象匹配的每個對象屬性 - 現在使用Array.prototype.some檢查至少一次對象存在於數組中。

見下面的演示:

var array1=[{h:1480508328,rid:16,sid:2},{h:87542,rid:18,sid:9}]; 
 
var object={h:1480508328,rid:16,sid:2} 
 

 
var result = array1.some(function(e){ 
 
    return Object.keys(object).length === Object.keys(e).length && Object.keys(e).every(function(k){ 
 
    return k in object && e[k] === object[k]; 
 
    }); 
 
}); 
 

 
console.log(result);

+0

什麼是對象屬性...你的意思是'鑰匙'? –

+0

'object'與你的'array2'相同 – kukkuz

+0

@james Oduro對象具有屬性,並且數組的鍵也是屬性,因爲數組是JS中的一個對象。然而,數組也可能具有不是鍵的屬性。最好是這樣想。 – Redu