簡體   English   中英

檢查數組中的所有元素是否都存在於另一個數組中

[英]Check if all elements in an array are present in another

我想做一個函數來檢查數組中的所有元素是否存在於另一個數組中。 我試圖做到這一點:

function includesAll (needles, haystack) {
  return needles.every((needle) => {
    return haystack.includes(needle)
  })
}

但是,當我為needles測試空數組的此函數時,如下所示: includesAll([], [1]) ,它返回true ,而我期望為false (因為[1].includes([])返回false )。 為什么會這樣? 並且可以編寫一個正確的函數(一個反映include行為的函數,但反映數組而不是元素的函數)嗎?

您的代碼按預期工作。 該函數應返回true,因為干草堆中包含空針陣列中沒有的元素。

你寫了:

因為[1] .includes([])返回false

...但是那不一樣,也不會發生。 include方法不會傳遞needles數組,而是傳遞該數組中的元素。 而且由於沒有, 包括永遠不會被調用。 該函數應該返回true ,因為沒有不包含的元素。

如果出於某種原因您想要其他行為,則可以執行以下操作:

function includesAll (needles, haystack) {
    return !needles.length && needles.every(needle => haystack.includes(needle));
}

這樣,您要求該函數僅在具有至少一個元素的情況下才能返回true

您的邏輯存在缺陷。 在includesAll函數中,您正在比較兩個數組。 因此,

includesAll([], [1]);

應該返回true

這不等於檢查

[1].includes([]);

它正在檢查數組[1]包含一個空數組,而沒有。

就您的功能而言,這就像檢查

includesAll([[]], [1]);

應該返回false

在MDN上閱讀

every行為都像數學中的“所有人”量詞。 特別是對於空數組,它返回true。 (空集的所有元素都滿足任何給定條件是完全虛假的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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