有一个像这样的对象数组:
[
{
timestamp: 1318781876
any: 'other fields'
}
]
当然,该阵列中有多个对象。我正在使用momentJS
- 如果这里很重要......
现在我需要将该数组分成几个月。这意味着我需要获得7月份的所有物品。将它们显示在表格中。 这是可能的还是我应该改变数据结构?我认为使用时间戳是最好的选择,因为我可以从中计算出所有内容。
但现在我在想是否必须向对象添加month
和year
字段...
答案 0 :(得分:2)
您可以迭代数组并构建树,也可以在对象中写下年份和月份:
<?php
$datee= date("F j, Y g:i a", strtotime("[MM_Member_Data
name='registrationDate']+ 10 hours"));
?>
Access until: <?php echo $datee; ?>
所以现在我们有了这样的地图:
var map={};
array.forEach(function(obj){
var d = new Date(obj.timestamp*1000);
var m = obj.month = d.getMonth() +1;
var y = obj.year = d.getFullYear();
if(!map[y]) map[y]={};
if(!map[y][m]) map[y][m]=[];
map[y][m].push(obj);
});
所以你现在可以通过以下方式获得所有7月:
map: {
2017 : {
8 : [
{
timestamp:123456,
month:8,
year:2017,
any:"other value"
}
]
}
}
这取决于你只做一次,然后其他答案会更容易,但如果你需要不同的时间范围,上面的代码只需要迭代一次,你就可以轻松获得过滤后的结果。要获得排序结果:
map[2017][7]
在构建哈希表时可能已经构建了这些数组,请参阅ninas way of doing this
答案 1 :(得分:1)
这可以使用array.filter
完成myArr = [
{
timestamp: 1318781876
any: 'other fields'
}
...
];
var filteredArray = myArr.filter(function(item) {
return (item.timestamp > minOfDateRange && item.timestamp < maxOfDateRange);
});
答案 2 :(得分:1)
您的结构非常有用。您可以使用Array.filter:
const startDate = new Date(2017, 6, 1); // 6 for July
const endDate = new Date(2017, 7, 1);
const selectedData = data.filter(entry => startDate <= entry.timestamp * 1000 && entry.timestamp * 1000 < endDate)
答案 3 :(得分:0)
使用以下代码将milisecond转换为日期,然后获取月份
var date = new Date(毫秒); var month = date.getMonth();
然后将7月对象放到另一个数组中并根据需要显示它们
答案 4 :(得分:0)
您可以使用hashmap方法。
var arr = [
...
{
timestamp: 1318781876
any: 'other fields'
}
...
];
var grouped = {};
var months = ['Jan', 'Feb' ...];
arr.forEach( function(item){
var dateObj = moment.unix(item.timestamp);
var month = months[dateObj.month()];
if(!grouped[month]){
grouped[month] = [];
}
grouped[month].push(item);
});
console.log(grouped);