Javascript 检查数组中的所有元素是否存在于另一个数组中
我想做一个函数来检查数组中的所有元素是否都存在于另一个数组中。我尝试过这样做:Javascript 检查数组中的所有元素是否存在于另一个数组中,javascript,arrays,Javascript,Arrays,我想做一个函数来检查数组中的所有元素是否都存在于另一个数组中。我尝试过这样做: function includesAll (needles, haystack) { return needles.every((needle) => { return haystack.includes(needle) }) } 但是,当我以指针的形式对空数组测试此函数时,如:includesAll[],[1],它返回true,而我预期为false,因为[1].includes[]返回fal
function includesAll (needles, haystack) {
return needles.every((needle) => {
return haystack.includes(needle)
})
}
但是,当我以指针的形式对空数组测试此函数时,如:includesAll[],[1],它返回true,而我预期为false,因为[1].includes[]返回false。为什么会发生这种情况?你能写一个正确的函数吗?一个反映行为的函数,但是对于数组而不是元素,你的逻辑有一个缺陷。在includesAll函数中,比较两个数组。因此,
includesAll([], [1]);
应该返回true
这并不等同于检查
[1].includes([]);
它正在检查数组[1]是否包含空数组,而它不包含空数组
就您的功能而言,这就像检查
includesAll([[]], [1]);
它将返回false您的代码正在按预期工作。函数应该返回true,因为空指针数组中没有不包含在haystack中的元素 你写道: 因为[1]。includes[]返回false ……但这不一样,也没有发生。includes方法不是传递给针数组,而是传递给该数组中的元素。因为没有,所以从不调用include。函数应该返回true,因为没有不包含的元素 如果出于某种原因,您需要另一种行为,您可以执行以下操作:
function includesAll (needles, haystack) {
return !needles.length && needles.every(needle => haystack.includes(needle));
}
这样,您就要求只有当指针至少有一个元素时,函数才能返回true。读取
每一个都像数学中的“对所有的量词”一样。特别是,对于空数组,它返回true。空集的所有元素都满足任何给定的条件,这是完全正确的
因为[1]。includes[]返回false:但这不相同,而且也不会发生。includes不会传递给数组,但会传递给该数组中的元素,因为没有元素,所以从不调用includes。函数应该返回true,因为没有不包含的元素。