![](/img/trans.png)
[英]How can I find an element in an array whose index equals another element's value?
[英]How can I find the index of an element, in an array of arrays?
這是一個包含至少一個其他數組的數組的簡單示例。 我想要一種在數組中查找數組索引的方法。 但是,我下面的代碼不起作用:
var arr = [1,2,[1,2]];
console.log(arr.indexOf([1,2])); //-> -1
for (var i = 0; i < arr.length; i++) {
if (arr[i] == [1,2])
return 'true' // does not return true
}
直觀上,這應該起作用,但是不起作用:
if ([1,2] == [1,2]) return 'true' // does not return true
有人可以解釋為什么它不起作用,並提供替代解決方案嗎? 謝謝!
不,但是您可以自己檢查:
var a = [1,2], b = [1,2];
a.length === b.length && a.every(function(x,y) { return x === b[y]; });
JavaScript中的數組是按引用而不是按值進行比較的。 這就是為什么
console.log([1,2] == [1,2])
返回false
。
您需要一個可以比較數組的自定義函數。 如果只想檢查嵌套的第一級,則可以使用以下代碼:
var compareArrays = function(a, b) {
if (a.length !== b.length) {
return false;
}
for (var i = 0, len = a.length; i < len; i++) {
if (a[i] !== b[i]) {
return false;
}
}
return true;
}
您會混淆相似對象與相同對象的定義。 Array.prototype.indexOf()
使用嚴格相等比較算法比較對象。 對於(許多)對象,這意味着對象引用比較(即對象的唯一標識符,幾乎類似於其內存地址)。
在上面的示例中,您試圖將兩個相似的數組視為同一數組,這就是為什么它不起作用的原因。 要執行您想做的事情,您需要使用相同的數組。 像這樣:
var testArr = [1,2]; //a specific object with a specific reference
var arr = [1,2,testArr]; //the same array, not a different but similar array
console.log(arr.indexOf(testArr)); //returns 2
如果只想知道父數組中的數組,請使用Array.isArray()
:
...
if(Array.isArray(arr[i])) {
//do something
}
...
希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.