我有一个带有路径和时间戳的对象,如下所示:
{
events: [
{
path: '/src/IMG__0001.jpg',
time: '2011:03:11 11:29:27'
},
{
path: '/src/IMG__0002.jpg',
time: '2011:03:11 11:29:32'
},
{
path: '/src/IMG__0003.jpg',
time: '2011:03:11 11:29:37'
},
{
path: '/src/IMG__0004.jpg',
time: '2011:03:11 12:49:58'
},
{
path: '/src/IMG__0005.jpg',
time: '2011:03:11 12:50:14'
},
{
path: '/src/IMG__0334.jpg',
time: '2011:03:13 22:36:47'
},
{
path: '/src/IMG__0335.jpg',
time: '2011:03:13 22:38:49'
}
]
}
现在,我想对它进行排序并使用以下结构创建一个新对象:
{
events: [
{
date: '11.03.2011',
imgs: [
{
path: '/src/IMG__0001.jpg',
time: '2011:03:11 11:29:27'
},
{
path: '/src/IMG__0002.jpg',
time: '2011:03:11 11:29:32'
},
{
path: '/src/IMG__0003.jpg',
time: '2011:03:11 11:29:37'
},
{
path: '/src/IMG__0004.jpg',
time: '2011:03:11 12:49:58'
},
{
path: '/src/IMG__0005.jpg',
time: '2011:03:11 12:50:14'
}
]
},
{
date: '13.03.2011',
imgs: [
{
path: '/src/IMG__0334.jpg',
time: '2011:03:13 22:36:47'
},
{
path: '/src/IMG__0335.jpg',
time: '2011:03:13 22:38:49'
}
]
}
]
}
我知道我必须比较“时间”值,如果是新的一天,我必须在我的对象中创建一个带有“日期”的新插页。
答案 0 :(得分:1)
此代码将按日期对图像进行分组,并对组中的每组图像进行排序
//var array = your images
var output = [],
seenDates = {}
for (var i = 0, _len = array.length; i < _len; i++) {
var image = array[i],
timeSplit = image.time.split(" "),
date = timeSplit[0].replace(/:/g,".")
if ( !seenDates[date] ) {
//create an object
var obj = {
date: date,
imgs: [image]
}
//push it into the output, and seenDates object for easy access, changes in seenDates will be reflected in output to prevent nesting loops
output.push(obj)
seenDates[date] = {
"_ref": obj
}
} else {
seenDates[date]["_ref"].imgs.push(image)
}
}
//Start Sorting
var formatDate = function(dateString) {
dateString = dateString.split(" ")
dateString[0].replace(/:/g,".")
return dateString.join(" ")
}
output = output.sort(function(a,b){
return new Date(a.date) > new Date(b.date)
})
for ( var i = 0, _len = output.length; i < _len; i++ ) {
var images = output[i].imgs
images = images.sort(function(a,b){
return new Date(formatDate(a.time)) > new Date(formatDate(b.time))
})
}
请参阅小提琴:http://jsfiddle.net/879Lr/3/
答案 1 :(得分:0)
困难的部分是这些日期很难解析,因为月/年/日部分由:
而非-
分隔,因此我们可以轻松转换为ISODates以使{{1部分工作正常。
我在每个循环中对new Date
数组进行排序,因此这不是高效的 - 这是一个留给读者的练习。
这是jsfiddle。
imgs