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