繁体   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