gpt4 book ai didi

javascript - 将对象转换为数组并将名称映射为键和子项

转载 作者:行者123 更新时间:2023-11-30 00:25:41 24 4
gpt4 key购买 nike

我有这个数据集

var items = {
1: {
id: 1,
name: 'foo',
date: {
MMM : 'february',
yyyy : '2014',
S : '14th'
}
},
2: {
id: 2,
name: 'bar',
date: {
MMM : 'february',
yyyy : '2014',
S : '7th'
}
},
3: {
id: 3,
name: 'bazz',
date: {
MMM : 'august',
yyyy : '2015',
S : '21st'
}
},
4: {
id: 4,
name: 'sup',
date: {
MMM : 'may',
yyyy : '2015',
S : '8th'
}
},
5: {
id: 6,
name: 'awe',
date: {
MMM : 'february',
yyyy : '2014',
S : '1st'
}
}

};

然后我使用带有此自定义函数的 lodash 将它们分组:

_.groupByMulti = function(obj, values, context) {
if (!values.length) {
return obj;
}
var byFirst = _.chain(obj)
.groupBy(values[0], context)
.value();

var rest = values.slice(1);

for (var prop in byFirst) {
if (prop) {
byFirst[prop] = _.groupByMulti(byFirst[prop], rest, context);
}
}

return byFirst;
}

所以 _.groupByMulti(items, ['date.yyyy', 'date.MMM', 'date.S']); 将重新运行:

{
"2014": {
"february": {
"14th": [
{
"id": 1,
"name": "foo",
"date": {
"MMM": "february",
"yyyy": "2014",
"S": "14th"
}
}
],
"7th": [
{
"id": 2,
"name": "bar",
"date": {
"MMM": "february",
"yyyy": "2014",
"S": "7th"
}
}
],
"1st": [
{
"id": 6,
"name": "awe",
"date": {
"MMM": "february",
"yyyy": "2014",
"S": "1st"
}
}
]
}
},
"2015": {
"august": {
"21st": [
{
"id": 3,
"name": "bazz",
"date": {
"MMM": "august",
"yyyy": "2015",
"S": "21st"
}
}
]
},
"may": {
"8th": [
{
"id": 4,
"name": "sup",
"date": {
"MMM": "may",
"yyyy": "2015",
"S": "8th"
}
}
]
}
}
}

现在我如何扩展我的 lodash 函数,以便它将对象转换为数组,并让它们像这样:

[
{
key: '2015',
children: [
{
key: 'february',
children: [...]
}
]
}
]

最佳答案

鉴于您目前拥有:

var out = _.groupByMulti(items, ['date.yyyy', 'date.MMM', 'date.S']);

返回一个对象。将它包装成数组,这可能会成功:

_.map(_.keys(out), function(year){

return {
key: year,
children: _.map(_.keys(out[year]),function(month){
return {
key: month,
children: out[year][month]
}
})
}
});

关于javascript - 将对象转换为数组并将名称映射为键和子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31535801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com