gpt4 book ai didi

javascript - 检查一个数组中的每个元素是否都在第二个数组中

转载 作者:IT老高 更新时间:2023-10-28 21:53:46 26 4
gpt4 key购买 nike

我有两个数组,我想检查 arr2 中的每个元素是否都在 arr1 中。如果元素的值在 arr2 中重复,则它需要在 arr1 中重复相同的次数。这样做的最佳方法是什么?

arr1 = [1, 2, 3, 4]
arr2 = [1, 2]

checkSuperbag(arr1, arr2)
> true //both 1 and 2 are in arr1

arr1 = [1, 2, 3, 4]
arr2 = [1, 2, 5]

checkSuperbag(arr1, arr2)
> false //5 is not in arr1

arr1 = [1, 2, 3]
arr2 = [1, 2, 3, 3]

checkSuperbag(arr1, arr2)
> false //3 is not in arr1 twice

最佳答案

你必须支持糟糕的浏览器吗?如果没有,every功能应该使这很容易。

如果 arr1 是 arr2 的超集,则 arr2 中的每个成员都必须存在于 arr1 中

var isSuperset = arr2.every(function(val) { return arr1.indexOf(val) >= 0; });

这是 fiddle

编辑

所以您要定义超集,以便对于 arr2 中的每个元素,它在 arr1 中出现的次数相同?我认为 filter将帮助您做到这一点(从前面的 MDN 链接中获取 shim 以支持旧版浏览器):

var isSuperset = arr2.every(function (val) { 
var numIn1 = arr1.filter(function(el) { return el === val; }).length;
var numIn2 = arr2.filter(function(el) { return el === val; }).length;
return numIn1 === numIn2;
});

Updated Fiddle

结束编辑


如果您确实想支持旧版浏览器,上面的 MDN 链接有一个您可以添加的 shim,为了您的方便,我在这里复制它:

if (!Array.prototype.every)  
{
Array.prototype.every = function(fun /*, thisp */)
{
"use strict";

if (this == null)
throw new TypeError();

var t = Object(this);
var len = t.length >>> 0;
if (typeof fun != "function")
throw new TypeError();

var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in t && !fun.call(thisp, t[i], i, t))
return false;
}

return true;
};
}

编辑

请注意,这将是一个 O(N2) 算法,因此请避免在大型数组上运行它。

关于javascript - 检查一个数组中的每个元素是否都在第二个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8628059/

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