我正在尝试创建这样的集合以便在 React 组件中使用:
let data = [
{
group : 'A',
children : [
{ name : 'Animals', id : 22 },
...
]
},
{
group : 'B', children : [
{ name : 'Batteries', id : 7},
{ name : 'Baggage', id : 12 },
...
]
},
{
group : 'C', children : [
{ name : 'Cake', id : 7},
...
]
},
]
我已经像这样对我的数据进行了排序:
let rawData = [
{ name : 'Animals', id : 10},
{ name : 'Batteries', id : 7},
{ name : 'Baggage', id : 12 },
{ name : 'Cake', id : 7},
...
]
我也用过这个sorting method但问题是,它返回一个对象,其中包含 A
、B
、C
键以及子项作为值。但是我必须像上面那样把它变成数组才能使用它。
这是我到目前为止尝试过的:
let data = rawData.reduce(function(prevVal, newVal){
char = newVal.name[0].toUpperCase();
return { group: char, children :{name : newVal.name, id : newVal.id}};
},[])
最佳答案
您可以使用 reduce
创建对象,然后对该对象使用 Object.values
。
let rawData = [
{ name : 'Animals', id : 10},
{ name : 'Batteries', id : 7},
{ name : 'Baggage', id : 12 },
{ name : 'Cake', id : 7},
]
let data = rawData.reduce((r, e) => {
// get first letter of name of current element
let group = e.name[0];
// if there is no property in accumulator with this letter create it
if(!r[group]) r[group] = {group, children: [e]}
// if there is push current element to children array for that letter
else r[group].children.push(e);
// return accumulator
return r;
}, {})
// since data at this point is an object, to get array of values
// we use Object.values method
let result = Object.values(data)
console.log(result)
关于javascript - 按首字母 Javascript 的字母顺序对对象进行排序和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51009090/