我有以下数据结构;
=if(sumproduct((B2:B=B2)*(C2:C="sign out")*(A2:A))=0,"",if(C2="Sign in",arrayformula(sumproduct((B2:B=B2)*(C2:C="sign out")*(A2:A))-sumproduct((B2:B=B2)*(C2:C="sign in")*(A2:A))),""))
使用lodash库,我想创建以下数据结构;
var data = [{
"username": "admin",
"update": "19/07/2015 17:44:14"
}, {
"username": "admin",
"update": "19/07/2015 17:00"
}, {
"username": "joebloggs",
"update": "19/07/2015 17:00"
}, {
"username": "joebloggs",
"update": "19/07/2015 17:44:14"
}];
如您所见,我需要删除重复的名称并仅存储最近的日期。任何有关这方面的帮助将不胜感激,
答案 0 :(得分:4)
您可以使用orderBy()按update
日期值降序排序,然后使用uniqBy()删除重复值。
var data = [{
"username": "admin",
"update": "19/07/2015 17:44:14"
}, {
"username": "admin",
"update": "19/07/2015 17:00"
}, {
"username": "joebloggs",
"update": "19/07/2015 17:00"
}, {
"username": "joebloggs",
"update": "19/07/2015 17:44:14"
}];
var result = _(data)
.orderBy(v => new Date(v.update), 'desc')
.uniqBy('username')
.value();
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdn.jsdelivr.net/lodash/4.12.0/lodash.min.js"></script>
<强>更新强>
我注意到update
日期值不符合IETF-compliant RFC 2822 timestamps和version of ISO8601日期格式,请将Date documentation作为参考。因此,上述解决方案不适用于最近日期条件。
您有两种方法可以解决此问题:
更改格式化update
日期值的方式(来自后端或从中获取的资源)。这样,上述解决方案仍然适用。
在运行时转换日期格式。解决方案如下所示:
var data = [{
"username": "admin",
"update": "19/07/2015 17:44:14"
}, {
"username": "admin",
"update": "19/07/2015 17:00"
}, {
"username": "joebloggs",
"update": "19/07/2015 17:00"
}, {
"username": "joebloggs",
"update": "19/07/2015 17:44:14"
}];
var result = _(data)
.orderBy(v => {
var ds = v.update.split(' ');
ds[0] = ds[0].split('/').reverse().join('/');
return new Date(ds.join(' '));
}, 'desc')
.uniqBy('username')
.value();
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdn.jsdelivr.net/lodash/4.12.0/lodash.min.js"></script>