Javascript对象映射计算具有特定范围内的值的键数

时间:2019-10-30 13:45:41

标签: javascript

我的问题是我想创建一个新对象,其中包含键计数值在一定范围内的计数。我认为,表达我这个问题的最好方法是按如下说明。

我的数据集如下:

a = 1-1000的有序数字序列,例如id /行号

b = 1-100之间的任意随机数

{"a":1,"b":59},
{"a":2,"b":88},
{"a":3,"b":69},
{"a":4,"b":28},
{"a":5,"b":75},
{"a":6,"b":78}
...]

现在,我想创建一种算法来计算a(行数)的数量,其频率(b)在例如0-9的范围内,并将该值放入一个新对象,理想情况下看起来像< / p>

以c表示该范围(0-9、1-19、20-29 ... 90-100)

和d表示ID(a)的计数,其频率(b)在范围(c)

[
{"c":1, "d":10},
{"c":2, "d":13},
{"c":3, "d":20},
...
{"c":10, "d":6}
]

我尝试了几种不同的方法,但未获得预期的结果。我还需要将该计数的结果放入一个我不确定该怎么做的新对象Map中。

dat = [
  { "ruid": 1, "id_frequency": 5 },
  { "ruid": 2, "id_frequency": 88 },
  { "ruid": 3, "id_frequency": 69 },
  { "ruid": 4, "id_frequency": 28 },
  { "ruid": 5, "id_frequency": 75 },
  { "ruid": 6, "id_frequency": 78 },
  { "ruid": 7, "id_frequency": 18 },
  { "ruid": 8, "id_frequency": 90 },
  { "ruid": 9, "id_frequency": 22 }
];

var freq = Object.keys(dat).filter(function(key){
   return ( dat[key] > 0 && dat[key] <10 );
}).length;

1 个答案:

答案 0 :(得分:0)

您可以将一个数组和该值的十分之一的整数作为索引进行计数。

var data = [{ a: 1, b: 59 }, { a: 2, b: 88 }, { a: 3, b: 69 }, { a: 4, b: 28 }, { a: 5, b: 75 }, { a: 6, b: 78 }],
    result = data
        .reduce((r, { b }) => {
            r[Math.floor(b / 10)].d++;
            return r;    
        }, Array.from({ length: 10 }, (_, i) => ({ c: i + 1, d: 0})))


console.log(result);