从时间戳属性中分离基于小时的对象数组
Segregating array of objects based on hour-wise from time-stamp attribute
我有一组对象,这些对象按小时组合。例如:
[{"id": "12345", "data": "abc", "timestamp": "2017-10-17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"},
{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"},
{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"},
{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}]
我想要以下格式的结果数据:
{ "00:00-00:59":
[{"id": "12345", "data": "abc", "timestamp": "2017-10-17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"}]
"01:00-01:59":
[{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"}]
"05:00-05:59": [{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"}]
"06:00-06:59": [{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}]
是否可以像上面说的那样格式化数据?如何编写一个简短的代码来满足需求?
试试这个代码
var a = [{"id": "12345", "data": "abc", "timestamp": "2017-10- 17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"},
{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"},
{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"},
{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}]
var t, h, n, obj = {};
for(var i=0; i<a.length; i++) {
t = new Date(a[i].timestamp);
if ( !isNaN( t.getTime() ) ) { //if date is valid
h = t.getHours();
n = h + ':00-' + h + ':59';
if(typeof obj[n] === 'undefined') obj[n] = [];
obj[n].push(a[i]);
}
}
console.log(obj);
您可以使用Array.reduce
方法将您的数组转换为所需的对象。
参见下面的示例。
var a = [{"id": "12345", "data": "abc", "timestamp": "2017-10- 17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"},
{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"},
{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"},
{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}]
var obj = a.reduce((acc, curr) => {
var t = new Date(curr.timestamp);
if(!isNaN(t.getTime())) {
var h = t.getHours();
var index = h + ':00-' + h + ':59';
if(!acc[index]) {
acc[index] = [];
}
acc[index].push(curr);
}
return acc;
}, {});
console.log(obj);
对 Fireman26 的回答进行了一些小的更正:
const data = [
{"id": "12345", "data": "abc", "timestamp": "2017-10-17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"},
{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"},
{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"},
{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}
]
const grouped = data.reduce((obj, item) => {
const hourString = String(new Date(item.timestamp).getUTCHours()).padStart(2, '0')
if (hourString !== "NaN") {
const key = `${hourString}:00-${hourString}:59`;
(obj[key] = obj[key] || []).push(item)
}
return obj;
}, {});
- UTC 时区采用小时。
- 小时用“0”填充,即
01:00-01:59
而不是 1:00-1:59
。
我有一组对象,这些对象按小时组合。例如:
[{"id": "12345", "data": "abc", "timestamp": "2017-10-17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"},
{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"},
{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"},
{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}]
我想要以下格式的结果数据:
{ "00:00-00:59":
[{"id": "12345", "data": "abc", "timestamp": "2017-10-17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"}]
"01:00-01:59":
[{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"}]
"05:00-05:59": [{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"}]
"06:00-06:59": [{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}]
是否可以像上面说的那样格式化数据?如何编写一个简短的代码来满足需求?
试试这个代码
var a = [{"id": "12345", "data": "abc", "timestamp": "2017-10- 17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"},
{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"},
{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"},
{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}]
var t, h, n, obj = {};
for(var i=0; i<a.length; i++) {
t = new Date(a[i].timestamp);
if ( !isNaN( t.getTime() ) ) { //if date is valid
h = t.getHours();
n = h + ':00-' + h + ':59';
if(typeof obj[n] === 'undefined') obj[n] = [];
obj[n].push(a[i]);
}
}
console.log(obj);
您可以使用Array.reduce
方法将您的数组转换为所需的对象。
参见下面的示例。
var a = [{"id": "12345", "data": "abc", "timestamp": "2017-10- 17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"},
{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"},
{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"},
{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}]
var obj = a.reduce((acc, curr) => {
var t = new Date(curr.timestamp);
if(!isNaN(t.getTime())) {
var h = t.getHours();
var index = h + ':00-' + h + ':59';
if(!acc[index]) {
acc[index] = [];
}
acc[index].push(curr);
}
return acc;
}, {});
console.log(obj);
对 Fireman26 的回答进行了一些小的更正:
const data = [
{"id": "12345", "data": "abc", "timestamp": "2017-10-17T00:05:30.523Z"},
{"id": "16375", "data": "sgr", "timestamp": "2017-10-17T00:23:54.234Z"},
{"id": "46537", "data": "etd", "timestamp": "2017-10-17T01:36:16.463Z"},
{"id": "83645", "data": "eth", "timestamp": "2017-10-17T01:32:25.640Z"},
{"id": "36153", "data": "her", "timestamp": "2017-10-17T01:56:13.478Z"},
{"id": "31383", "data": "sry", "timestamp": "2017-10-17T05:56:56.362Z"},
{"id": "68123", "data": "rya", "timestamp": "2017-10-17T06:34:30.652Z"}
]
const grouped = data.reduce((obj, item) => {
const hourString = String(new Date(item.timestamp).getUTCHours()).padStart(2, '0')
if (hourString !== "NaN") {
const key = `${hourString}:00-${hourString}:59`;
(obj[key] = obj[key] || []).push(item)
}
return obj;
}, {});
- UTC 时区采用小时。
- 小时用“0”填充,即
01:00-01:59
而不是1:00-1:59
。