javascript – 使用lodash将对象数组分组为特定格式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 使用lodash将对象数组分组为特定格式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2874字,纯文字阅读大概需要5分钟。
内容图文
![javascript – 使用lodash将对象数组分组为特定格式](/upload/InfoBanner/zyjiaocheng/774/ba533404d52c457c9464ad2e695cd39e.jpg)
我有这个对象数组,我需要修改它以使渲染更容易.我使用了类似问题中提到的一些代码:
Group array of object nesting some of the keys with specific names
这是我的数组和代码
function groupAndMap(events, Year, Month, predic){
return _.map(_.groupBy(events,Year), (obj,key) => ({
[Year]: key,
[Month]: (predic && predic(obj)) || obj
}));
}
const items = [
{
"Year": 2018,
"Month": 7,
"Day": 2,
"Title": "event1",
"StartDate": "2018-07-02T10:00:00.000Z",
"EndDate": "2018-07-02T11:00:00.000Z"
}, {
"Year": 2018,
"Month": 8,
"Day": 31,
"Title": "event2",
"StartDate": "2018-07-31T10:00:00.000Z",
"EndDate": "2018-08-02T11:00:00.000Z"
}
];
function groupAndMap(items, itemKey, childKey, predic){
return _.map(_.groupBy(items,itemKey), (obj,key) => ({
[itemKey]: key,
[childKey]: (predic && predic(obj)) || obj
}));
}
var result = groupAndMap(items,"Year","Months",
arr => groupAndMap(arr,"Month", "Days"));
var jsonvalue = JSON.stringify(result);
document.write(jsonvalue);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
我希望我的输出格式如下
[{
"Year": "2019",
"Months": [{
"Month": "8",
"Days": [{
"Day": "31",
"Events": [{
"Year": 2019,
"Month": 8,
"Day": 31,
"Title": "event3",
"StartDate": "2018-07-31T10:00:00.000Z",
"EndDate": "2018-08-02T11:00:00.000Z"
}]
}]
}]
}]
我应该如何修改代码才能得到这个结果?
解决方法:
您可以使用带有键的数组来为嵌套对象分组.
function groupAndMap(events, groups) {
return _(events)
.groupBy(groups[0])
.map((array, key) => ({
[groups[0]]: key,
[groups[1] + 's']: groups[2] && groupAndMap(array, groups.slice(1)) || array
}))
.values();
}
var items = [{ Year: 2018, Month: 7, Day: 2, Title: "event1", StartDate: "2018-07-02T10:00:00.000Z", EndDate: "2018-07-02T11:00:00.000Z" }, { Year: 2018, Month: 8, Day: 31, Title: "event2", StartDate: "2018-07-31T10:00:00.000Z", EndDate: "2018-08-02T11:00:00.000Z" }],
result = groupAndMap(items, ["Year", "Month", "Day", "Event"]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
使用已定义的结果键
function groupAndMap(events, groups, keys) {
return _(events)
.groupBy(groups[0])
.map((array, key) => ({
[groups[0]]: key,
[groups[1] + 's']: groups[2] && groupAndMap(array, groups.slice(1), keys) || _.map(array, o => _.pick(o, keys))
}))
.values();
}
var items = [{ Year: 2018, Month: 7, Day: 2, Title: "event1", StartDate: "2018-07-02T10:00:00.000Z", EndDate: "2018-07-02T11:00:00.000Z" }, { Year: 2018, Month: 8, Day: 31, Title: "event2", StartDate: "2018-07-31T10:00:00.000Z", EndDate: "2018-08-02T11:00:00.000Z" }],
result = groupAndMap(items, ["Year", "Month", "Day", "Event"], ['Title', 'StartDate', 'EndDate']);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
内容总结
以上是互联网集市为您收集整理的javascript – 使用lodash将对象数组分组为特定格式全部内容,希望文章能够帮你解决javascript – 使用lodash将对象数组分组为特定格式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。