2016-09-30 1 views
-4

Можно ли объединить два массива, сохраняя все уникальные записи в количестве, которое они существуют в массиве, который имеет больше определенной записи? Смешение Я знаю, здесьКонкатентные два массива, сохраняющие наивысшую вероятность каждого элемента

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

вернуть бы

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

Спасибо заранее. Если его где-то жаль, я не могу назвать его более простым и не знаю, что искать.

+1

все __unique__ записи ??? в массиве _one_ 'a' не уникально – Satpal

+0

что такое' a' или 'b' ...? переменная со строкой, объектом, функцией? –

+2

Да, это возможно. Что вы пробовали? – vlaz

ответ

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);

+0

Это один из способов решения, рабочий путь, который есть. Спасибо, Нина! –

1

Если я правильно вас понимаю, вы должны преобразовать оба массива в две карты, где ключ - это элемент, а значение - количество вхождений этого элемента.

Тогда вы можете сравнить, на какой карте у вас больше элементов товара, и с помощью этой информации вы можете создать объединенную таблицу.

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

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

Вы правильно поняли. Это то, о чем я думал, бродил по ним по методу. Спасибо –