Concat两个数组保持每个项目的最高出现率

时间:2016-09-30 12:52:26

标签: javascript

是否可以连接两个数组,使其中存在的所有唯一条目保留在具有更多特定条目的数组中?令我感到困惑的是,这里

one=[a,a,a,a,a,b]
two=[a,b,c]

会返回

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

提前致谢。如果对不起,我不能说它更简单,也不知道该找什么。

2 个答案:

答案 0 :(得分:2)

您可以使用Map计算项目并使用最大数量来返回值。

var one = ['a', 'a', 'a', 'a', 'a', 'b'],
    two = ['a', 'b', 'c'],
    count = new Map,
    result = [];

[one, two].forEach(function (a, i, aa) {
    a.forEach(function (b) {
        var item = count.get(b);
        if (!item) {
            item = Array.apply(null, { length: aa.length }).fill(0);
            count.set(b, item);
        }
        item[i]++;
    });
});

count.forEach(function (v, k) {
    var l = Math.max.apply(null, v);
    while (l--) {
        result.push(k);
    }
});

console.log(result);

答案 1 :(得分:1)

如果我理解正确,你应该将两个数组转换为两个映射,其中key是项目,值是该元素的出现次数。

然后,您可以比较您在哪个地图中出现更多项目,并使用此信息创建合并表格。

one=[a,a,a,a,a,b]
two=[a,b,c]

mapOne = {a:5,b:1}
mapTwo = {a:1,b:1,c:1}