首頁  >  問答  >  主體

在 JavaScript 中如何檢查陣列是否包含值?

<p>找出 JavaScript 陣列是否包含值的最簡潔、最有效的方法是什麼? </p> <p>這是我唯一知道的方法:</p> <pre class="brush:php;toolbar:false;">function contains(a, obj) { for (var i = 0; i < a.length; i ) { if (a[i] === obj) { return true; } } return false; }</pre> <p>有沒有更好、更簡潔的方法來實現這一點? </p> <p>這與 Stack Overflow 問題 <em>在 JavaScript 陣列中尋找專案的最佳方式? </em> 密切相關,該問題解決了使用 <code>indexOf</code> 在陣列中尋找物件的問題。 </p>
P粉592085423P粉592085423424 天前417

全部回覆(2)我來回復

  • P粉788571316

    P粉7885713162023-08-24 00:43:22

    2019 年更新:這個答案來自 2008 年(11 歲了!),與現代 JS 的使用無關。承諾的效能改進是基於當時瀏覽器中完成的基準測試。它可能與現代 JS 執行上下文無關。如果您需要簡單的解決方案,請尋找其他答案。如果您需要最佳效能,請在相關執行環境中為自己進行基準測試。

    正如其他人所說,透過陣列迭代可能是最好的方法,但它已被證明,遞減的while 循環是JavaScript 中最快的迭代方式。因此,您可能需要如下重寫程式碼:

    function contains(a, obj) {
        var i = a.length;
        while (i--) {
           if (a[i] === obj) {
               return true;
           }
        }
        return false;
    }

    當然,你也可以擴充Array原型:

    Array.prototype.contains = function(obj) {
        var i = this.length;
        while (i--) {
            if (this[i] === obj) {
                return true;
            }
        }
        return false;
    }

    現在您可以簡單地使用以下內容:

    alert([1, 2, 3].contains(2)); // => true
    alert([1, 2, 3].contains('2')); // => false

    回覆
    0
  • P粉076987386

    P粉0769873862023-08-24 00:14:12

    現代瀏覽器有 Array#includes,它完全做到了這一點,並且受到IE 之外的所有人的廣泛支持

    console.log(['joe', 'jane', 'mary'].includes('jane')); // true

    回覆
    0
  • 取消回覆