使用下划线计算出现次数并填充缺失值
Use underscore to count occurrences and fill missing values
假设我有一系列介于 1 和 10 之间的数字。我想知道每个数字出现的频率。我可以这样做:
var a = [4,5,6,7,8,9,4,6,8,9,3,5,7,8,4,5,8,4,7];
var b = _.countBy(a, _.identity);
但是 console.log(b)
产生:
Object {
//1=0, this is missing
//2=0, this is missing
3=1,
4=4,
5=3,
6=2,
7=3,
8=4,
9=2,
//10=0 this is missing
}
因此缺少 1
、2
和 10
类别。
使用下划线,如何强制包含它们,并以零作为它们的值?
用普通的javascript你可以做到
var array = [4, 5, 6, 7, 8, 9, 4, 6, 8, 9, 3, 5, 7, 8, 4, 5, 8, 4, 7];
var counts = {};
for (var i = 1; i <= 10; i++) {
counts[i] = 0;
}
array.forEach(function(number) {
counts[number]++;
});
console.log(counts);
试试这个
var a = [4,5,6,7,8,9,4,6,8,9,3,5,7,8,4,5,8,4,7],
obj = {};
_.each(_.range(1, 11), function(item) {
obj[item] = 0
})
_.each(a, function(item) {
++obj[item];
});
对象将是:
{
"1": 0,
"2": 0,
"3": 1,
"4": 4,
"5": 3,
"6": 2,
"7": 3,
"8": 4,
"9": 2,
"10": 0
}
假设我有一系列介于 1 和 10 之间的数字。我想知道每个数字出现的频率。我可以这样做:
var a = [4,5,6,7,8,9,4,6,8,9,3,5,7,8,4,5,8,4,7];
var b = _.countBy(a, _.identity);
但是 console.log(b)
产生:
Object {
//1=0, this is missing
//2=0, this is missing
3=1,
4=4,
5=3,
6=2,
7=3,
8=4,
9=2,
//10=0 this is missing
}
因此缺少 1
、2
和 10
类别。
使用下划线,如何强制包含它们,并以零作为它们的值?
用普通的javascript你可以做到
var array = [4, 5, 6, 7, 8, 9, 4, 6, 8, 9, 3, 5, 7, 8, 4, 5, 8, 4, 7];
var counts = {};
for (var i = 1; i <= 10; i++) {
counts[i] = 0;
}
array.forEach(function(number) {
counts[number]++;
});
console.log(counts);
试试这个
var a = [4,5,6,7,8,9,4,6,8,9,3,5,7,8,4,5,8,4,7],
obj = {};
_.each(_.range(1, 11), function(item) {
obj[item] = 0
})
_.each(a, function(item) {
++obj[item];
});
对象将是:
{
"1": 0,
"2": 0,
"3": 1,
"4": 4,
"5": 3,
"6": 2,
"7": 3,
"8": 4,
"9": 2,
"10": 0
}