繁体   English   中英

从Javascript中的另一个数组创建出现次数数组

[英]Create an array of number of occurrences from another array in 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]

这里count是按monthRange的顺序给出的,它以monthNames给出每个月的计数。

所以在这里

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

这样做:

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

您可以map monthRange ,然后过滤monthNames以返回每个月出现的次数:

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

使用下划线,您可以这样做:

_.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)

尝试使用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... 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM