簡體   English   中英

如何在數組數組中找到元素的索引?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM