是否可以连接两个数组,使其中存在的所有唯一条目保留在具有更多特定条目的数组中?令我感到困惑的是,这里
one=[a,a,a,a,a,b]
two=[a,b,c]
会返回
[a,a,a,a,a,b,c]
提前致谢。如果对不起,我不能说它更简单,也不知道该找什么。
答案 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}