Итак, у меня есть 2 массива, как эти ...

var browser_names = ["Firefox", "Maxthon", "Opera", "Opera", "Chrome", "Chrome", "Edge", "Firefox"]

var user_count = [3, 3, 3, 3, 7, 20, 94, 142]

Я хочу результаты, подобные этим

var result_browser_names = ["Firefox", "Maxthon", "Opera", "Chrome", "Edge"]

var result_user_count = [145, 3, 6, 27, 94]

Как видите, « result_browser_names » содержит уникальные значения имени браузера и « result_user_count » содержит «сумму пользователей» для каждого типа браузера.

Я видел это решение, которое отлично работает для одного массива. В моем случае у меня есть 2 массива ....

Любая помощь очень ценится. Благодарность

0
Slyper 5 Сен 2016 в 05:39

2 ответа

Лучший ответ

Я бы предложил использовать объект. Предполагая, что ваши 2 массива всегда будут совпадать по длине:

var browser_names = ["Firefox", "Maxthon", "Opera", "Opera", "Chrome", "Chrome", "Edge", "Firefox"]
var user_count = [3, 3, 3, 3, 7, 20, 94, 142]
var lib = {}

for (var i=0; i < browser_names.length; i++) {
  if (lib[browser_names[i]] != undefined) {
    lib[browser_names[i]] += user_count[i];
  } else {
    lib[browser_names[i]] = user_count[i];
  }
}

Это должно дать вам имена браузеров и общее количество пользователей для каждого браузера, сохраненного в объекте lib

Кроме того, для условия if в цикле вы также можете сделать:

for (var i=0; i < browser_names.length; i++) {
  if (lib.hasOwnProperty(browser_names[i])) {
    lib[browser_names[i]] += user_count[i];
  } else {
    lib[browser_names[i]] = user_count[i];
  }
}

Кроме того, я знаю, что ваш оригинальный вопрос был выводом в массив. Вы можете легко пройтись по клавишам объекта, чтобы получить каждое из соответствующих им имен браузера и количество пользователей:

for (var k in lib) {
  console.log(k);         // Browser Names
  console.log(lib[k]);    // Their respective user counts
}
1
philip yoo 5 Сен 2016 в 02:59

Вы можете использовать один цикл и справку от объекта в качестве ссылки на массивы результатов.

var browser_names = ["Firefox", "Maxthon", "Opera", "Opera", "Chrome", "Chrome", "Edge", "Firefox"],
    user_count = [3, 3, 3, 3, 7, 20, 94, 142],
    result_browser_names = [],
    result_user_count = [];

browser_names.forEach(function (b, i) {
    if (!(b in this)) {
        this[b] = result_browser_names.push(b) - 1;
        result_user_count.push(0);
    }
    result_user_count[this[b]] += user_count[i];
}, Object.create(null));

console.log(result_browser_names);
console.log(result_user_count);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0
Nina Scholz 5 Сен 2016 в 06:39