gpt4 book ai didi

javascript - 检查一个数组是否包含在另一个数组中

转载 作者:搜寻专家 更新时间:2023-11-01 04:50:08 24 4
gpt4 key购买 nike

我有

['a', 'b', 'c']

我想知道这个数组是否包含在这个数组中:

['a', 'b', 'c', 'd']

我知道我可以做 2 个 for 循环并检查每个项目的项目,但是有一个 oneliner 吗?

最佳答案

您可以使用 Array.prototype.some 来做到这一点。这将针对数组中的所有项目运行提供的函数,如果函数对其中任何一项返回 true,则返回 true。如果 array 中的任何项目不包含在 otherArray 中,以下将返回 true,您可以使用它来确定一个数组是否完全包含在另一个数组中:

return !array.some(function(item) {
return otherArray.indexOf(item) === -1;
});

然而,这并不是最优雅的解决方案。逻辑可以概括为:

not any items from array not in other array

它有太多的负面影响。我们可以改用 Array.prototype.every,它非常相似,只是只有当数组中的所有项目都为提供的函数返回 true 时它才返回 true。下面等同于我们之前的内容:

return array.every(function(item) {
return otherArray.indexOf(item) !== -1;
});

除了可以总结为:

all items in array in other array

最后,我们可以将其实现为一个额外的原型(prototype)函数。请注意,every 的第二个参数是可选的,它设置 this 在提供时在函数中引用的内容。如果我们不传入它,我们将无法从外部范围引用 this

Array.prototype.contains = function(array) {
return array.every(function(item) {
return this.indexOf(item) !== -1;
}, this);
}

这现在可以在我们的代码中用作单行代码:

['a', 'b', 'c'].contains(['a', 'b']) // returns true

如果您能够使用 ECMAScipt 6,则可以使用箭头函数使其成为真正的单行代码。

return array.every(item => otherArray.indexOf(item) !== -1);

关于javascript - 检查一个数组是否包含在另一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31835447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com