计算javascript对象上的类似属性

计算javascript对象上的类似属性,javascript,Javascript,我有这样一个对象数组: [{"ts":"Thu, 20 Aug 2015 18:00:00 GMT"}, {"ts":"Thu, 20 Aug 2015 17:00:00 GMT"}, {"ts":"Thu, 20 Aug 2015 16:00:00 GMT"}, {"ts":"Thu, 20 Aug 2015 15:00:00 GMT"}, {"ts":"Wed, 19 Aug 2015 16:00:00 GMT"}, {"ts":"Wed, 19 Aug 2015 15:00:00 GMT"

我有这样一个对象数组:

[{"ts":"Thu, 20 Aug 2015 18:00:00 GMT"},
{"ts":"Thu, 20 Aug 2015 17:00:00 GMT"},
{"ts":"Thu, 20 Aug 2015 16:00:00 GMT"},
{"ts":"Thu, 20 Aug 2015 15:00:00 GMT"},
{"ts":"Wed, 19 Aug 2015 16:00:00 GMT"},
{"ts":"Wed, 19 Aug 2015 15:00:00 GMT"}]
每次我都会用这样的方法穿越:

_.each(times,function(t){
    console.log(t.ts);
}, this);
我使用
moment
来确保所有日期都具有相同的一天结束时间,以便忽略此变量。我想创建一个具有相同次数计数的新对象,例如

uniqueTimes = 
{
 {"Thu, 20 Aug 2015": 4},
 {"Wed, 19 Aug 2015": 2}
}

有什么建议吗?我正在考虑遍历
中的
uniqueTimes
对象。每个
函数都有数百次,因此每次迭代
uniqueTimes
都会越来越大。这似乎效率不高

您可以在运行时迭代并添加到唯一时间

var时间=[
{“ts”:“2015年8月20日星期四格林威治标准时间18:00:00”},
{“ts”:“2015年8月20日星期四格林威治标准时间17:00:00”},
{“ts”:“2015年8月20日星期四格林威治标准时间16:00:00”},
{“ts”:“2015年8月20日星期四格林威治标准时间15:00:00”},
{“ts”:“2015年8月19日星期三格林威治标准时间16:00:00”},
{“ts”:“2015年8月19日星期三格林威治标准时间15:00:00”}
];
var uniqueTimes={};
times.forEach(函数(时间){
var t=(time.ts.match(/^(.*)\s\d+\:/)| |[])[1];
在uniqueTimes中的t?uniqueTimes[t]++:uniqueTimes[t]=1;
});
document.body.innerHTML=''+JSON.stringify(uniqueTimes,null,4)+''使用ES6,您可以为任务使用数据结构:

const result = data.reduce((m, i) => {
    const key = i.ts; // or format your date with moment
    return m.set(key, m.has(key) ? m.get(key) + 1 : 1);
}, new Map());

console.log(result);

注意:检查您环境中的地图兼容性。

根据您对
的使用情况。每个
似乎都在使用LoDash或下划线。在这种情况下,这两个库都有一个方便的
..countBy
方法(,),可以让您获得所需的结果,如下所示

除了我正在使用的整个拆分/联接方法之外,还可以使用regex方法

var times=[{“ts”:“Thu,2015年8月20日18:00:00 GMT”},
{“ts”:“2015年8月20日星期四格林威治标准时间17:00:00”},
{“ts”:“2015年8月20日星期四格林威治标准时间16:00:00”},
{“ts”:“2015年8月20日星期四格林威治标准时间15:00:00”},
{“ts”:“2015年8月19日星期三格林威治标准时间16:00:00”},
{“ts”:“2015年8月19日星期三格林威治标准时间15:00:00”});
var groupedCounts=u0.countBy(时间、函数(项){
var分割=项目分割(“”);
var值=split.slice(0,split.length-2).join(“”);
返回值;
});
document.body.innerHTML=''+JSON.stringify(groupedCounts,null,2)+''
const result = data.reduce((m, i) => {
    const key = i.ts; // or format your date with moment
    return m.set(key, m.has(key) ? m.get(key) + 1 : 1);
}, new Map());

console.log(result);

是的,你是对的,我是新手,所以我只是在学习工具。感谢您指出
。.countBy
。这给了我一个好主意,如何继续处理绘制这些数据的问题,到目前为止,我已经得到了很好的结果。