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