每个人,这是我的数组结构
let data = [
{"name": "ragupathi", "siteID": 10},
{"name": "abi","siteID": 13},
{"name": "mahesh", "siteID": 12},
]
我想要基于siteID的组数据,所以我正在使用groupBy siteID
{
"10": [
{
"name": "ragupathi",
"siteID": 10
}
],
"12": [
{
"name": "mahesh",
"siteID": 12
}
],
"13": [
{
"name": "abi",
"siteID": 13
}
]
}
但是我期望输出名称按ASC顺序
{
"13": [
{
"name": "abi",
"siteID": 13
}
],
"10": [
{
"name": "mahesh",
"siteID": 12
}
],
"12": [
{
"name": "ragupathi",
"siteID": 10
}
],
}
GroupBy SiteID 根据对象名称的属性对输出进行分组
我无法根据对象属性名称更改对象的顺序 给出一些示例或参考代码,我是javascript新手
答案 0 :(得分:-1)
为什么需要一个以sideID为键的对象?您可以像这样对数组进行排序
let data = [
{"name": "ragupathi", "siteID": 10},
{"name": "abi","siteID": 13},
{"name": "mahesh", "siteID": 12},
]
data.sort((a,b) => {
if(a.siteID > b.siteID) {
return -1;
}
if(a.siteID < b.siteID) {
return 1;
}
return 0;
})
答案 1 :(得分:-1)
我不确定100%为什么阵列对您不起作用。
也许您希望对1个结构进行排序,并且还可以使用键访问对象。
您可能会发现仅使用Array.find()
会很快。
另一种选择,如果您不介意密钥带有前缀,例如。像_123
一样,这将强制键为字符串,例如在使用现代JS引擎时,该顺序基于插入顺序。因此,如果先执行sort
,然后执行reduce
,则应该以想要的顺序获得对象键,但是当然要带有简单的前缀。
当然,如果您以后要访问该对象,则只需记住输入前缀即可。
const data = [
{"name": "ragupathi", "siteID": 10},
{"name": "abi","siteID": 13},
{"name": "mahesh", "siteID": 12},
];
const ret =
data.sort((a, b) => a.name.localeCompare(b.name)).
reduce((a, v) => {
a[`_${v.siteID}`] = v;
return a;
}, {});
console.log(ret);
//test let's get id 13 by key
console.log(ret['_13']);
//prove order
console.log(Object.keys(ret));