2015-02-09 3 views
0

У меня есть два массива, который выглядит какСоздать массив числа появлений из другого массива в Javascript

var monthNames = [ "January", "January", "January", "April", "April", "December", "August", "August", "November", "November", "November", "December" ]; 

var monthRange = [ "January", "February", "March", "April", "May", "June", 
"July", "August", "September", "October", "November", "December" ]; 

Теперь мне интересно, как я должен работать в JS, так что я хотел бы получить новый массив обратно, снова с 12 элементами в нем (по одному на каждый месяц) и получить его. Так что это будет так -

[3, 0, 0, 2, 0, 0, 0, 2, 0, 0, 3, 1] 

Здесь отсчет в порядке monthRange, который дает рассчитывать на каждый месяц в monthNames.

Так вот

January : 3, 
April: 2, 
December: 1, 
August: 2, 
November: 3, 
December : 1 

ответ

2

Это будет делать это:

var counts = monthRange.map(function(val) { 
    var count = 0; 
    for (var i = 0, j = monthNames.length; i < j; i++) { 
     if (val === monthNames[i]) count++; 
    } 
    return count; 
}); 
+0

Спасибо так много. Для быстрого ответа. Это действительно помогает. – psharma

1

Вы можете map над monthRange, а затем фильтровать monthNames возвращать количество вхождений каждого месяца:

monthRange.map(function(month) { 
    return monthNames.filter(function(n) { return n === month }).length; 
}); 
1

С помощью подчеркивания вы можете сделать это как thi s:

_.reduce(array, function(memo, month) { 
    memo[month] = (memo[month] === undefined ? 0 : memo[month]) + 1; 
    return memo 
}, {}) 

В вашем случае, это может выглядеть как

var countMonths = function(array, m) { 
     return _.reduce(array, function(memo, month) { 
      memo[month] = (memo[month] === undefined ? 0 : memo[month]) + 1; 
      return memo 
     }, m) 
    } 

    var memo = countMonths(monthNames, {}) 
    memo = countMonths(monthRange, memo) 
+0

Большое спасибо за быстрый ответ. – psharma

+0

Добро пожаловать :) – mavarazy

1

Попробуйте Object следить за частотой:

var freq = function(list) { 
 
    var o = {}; 
 
    var l = list.length; 
 
    var v; 
 
    while (v = list[--l]) 
 
    o[v] = o[v] !== undefined ? o[v] + 1 : 1; 
 
    return o; 
 
}; 
 

 
console.log(freq(["January", "January", "January", "April", "April", "December", "August", "August", "November", "November", "November", "December"])); 
 

 
alert(JSON.stringify(freq(["apple", "mangoe", "apple"])));
Open console...

Смежные вопросы