javascript - 如何查找数组是否包含具有相同元素的另一个数组

标签 javascript arrays

我正在寻找一种方法来了解数组是否包含所有有区别的元素。

例如,b.containsDistinct(a) 将返回 true,而 c.containsDistinct(a) 将返回 false。

a = [1, 1, 1, 2]

b = [1, 2, 1, 1, 3] // return true
c = [1, 2, 3] // return false

我能找到的解决方案只有 a.every(i => b.indexOf(i) !== -1) 但是对于元素相同的情况不起作用

你会如何解决这个问题?

最佳答案

您可以计算值并检查计数是否为零或更小。

function distinct(a, b) {
    var counts = {};
    a.forEach(v => counts[v] = (counts[v] || 0) + 1);
    b.forEach(v => counts[v] = (counts[v] || 0) - 1);
    return Object.values(counts).every(count => count <= 0);
}

console.log(distinct([1, 1, 1, 2], [1, 2, 1, 1, 3]));
console.log(distinct([1, 1, 1, 2], [1, 2, 3]));

关于javascript - 如何查找数组是否包含具有相同元素的另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58580861/

相关文章:

javascript - 如何在JavaScript中检查两个对象是否有很少的匹配数据

c - 存储由零和一组成的大整数

c# - 定义二维动态数组

javascript - 导入库 jquery 的错误函数

javascript - 在 Firefox 操作系统中写入/读取文件

javascript - 设置匿名函数的名称

javascript - 将数组转换为具有默认值的对象的更简洁的方法? (Lodash 可用)

arrays - 在 PowerShell 中从对象中选择某些属性

javascript - typeof(/\s/) 和 $.type(/\s/) 的区别

javascript - typescript 中对象的通用类型数组