我有两个数组:
arr1 = [1, 2, 3, 1, 2, 3, 4]
arr2 = [1, 3, 1, 1]
arr3 = [1, 1, 2, 2, 3]
使用 arr1
作为基线,arr2
不匹配,因为它包含三个 1
,而 arr1
只有两个。但是,arr3
应该返回 true
,因为它具有来自 arr1
的元素。
我试过了
if(_.difference(arr2, arr1).length === 0)
但这没有考虑出现的次数
最佳答案
您可以计算第一个数组中的所有值,并使用 every
迭代第二个数组,如果未给定值或值为零,则提前返回,否则递减计数并继续。
function check(a, b) {
var count = a.reduce((o, v) => (o[v] = (o[v] || 0) + 1, o), {});
return b.every(v => count[v] && count[v]--);
}
var arr1 = [1, 2, 3, 1, 2, 3, 4],
arr2 = [1, 3, 1, 1],
arr3 = [1, 1, 2, 2, 3];
console.log(check(arr1, arr2)); // false
console.log(check(arr1, arr3)); // true
关于javascript - 在 JavaScript 中,如何检查一个数组是否包含另一个数组中的所有元素(包括计数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56791581/