我想创建一个函数来检查数组中的所有元素是否都存在于另一个元素中。我试过这样做:
function includesAll (needles, haystack) {
return needles.every((needle) => {
return haystack.includes(needle)
})
}
但是,当我为needles
测试空数组的此函数时,如下所示:includesAll([], [1])
,它返回true
,而我期待false
}(因为[1].includes([])
返回false
)。为什么会这样?你能写一个正确的函数(一个反映include
的行为,但是对于一个数组而不是一个元素)?
答案 0 :(得分:2)
您的代码按预期工作。该函数应该返回 true ,因为空针阵列中没有不包含在大海捞针中的元素。
您写道:
因为[1] .includes([])返回false
......但这不一样,也没有发生。 includes 方法未传递 needle 数组,而是该数组中的元素。由于没有, includes 永远不会被调用。该函数应返回true
,因为没有包含的元素。
如果由于某种原因你想要另一种行为,你可以这样做:
function includesAll (needles, haystack) {
return !needles.length && needles.every(needle => haystack.includes(needle));
}
这样,如果针至少有一个元素,则要求该函数只能返回true
。
答案 1 :(得分:1)
你的逻辑存在缺陷。在includesAll函数中,您将比较两个数组。因此,
includesAll([], [1]);
应该返回true
。
这不等于检查
[1].includes([]);
检查数组[1]
是否包含空数组,而不是。
就你的功能而言,这就像检查
一样includesAll([[]], [1]);
应返回false
答案 2 :(得分:1)
every
的行为类似于"对于所有"数学中的量词。特别是,对于空数组,它返回true。 (空集的所有元素都满足任何给定条件,这是真实的。)