[英]How to get number occurrences of any element of an array in another array in 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.