使用下划线计算出现次数并填充缺失值

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
}

因此缺少 1210 类别。

使用下划线,如何强制包含它们,并以零作为它们的值?

用普通的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
}