![](/img/trans.png)
[英]How can I reorder an ELEMENT inside of an OBJECT of an array of OBJECTS NOT sort?
[英]How can I sort this object by 'sortby' key which inside an array?
{
"AA": [
{
"key_name": "category",
"value": "long",
"sortby": "3"
}
],
"BB": [
{
"key_name": "category",
"value": "long",
"sortby": "5"
}
],
"CC": [
{
"key_name": "category",
"value": "short",
"sortby": "1"
}
]
}
我需要使用键“sortby”对这个对象进行排序,并且它在一个数组中? 任何人都可以帮忙吗?
您应该创建一个对象键数组,然后根据数据中的属性值对其进行排序,然后将它们映射到一个新对象中:
const data = { "AA": [ { "key_name": "category", "value": "long", "sortby": "3" } ], "BB": [ { "key_name": "category", "value": "long", "sortby": "5" } ], "CC": [ { "key_name": "category", "value": "short", "sortby": "1" } ] } const res = Object.keys(data).sort((a, b) => { return parseInt(data[a][0].sortby, 10) - parseInt(data[b][0].sortby, 10) }); const sortedData = {}; res.map(key => sortedData[key] = data[key]); console.log(sortedData)
这不是一个好的做法,因为对象在 javascript 中是可变的,并且这种实现可能会在将来给您带来很多麻烦。 最好的方法是对它们进行排序,然后将它们推入数组:
const data = { "AA": [ { "key_name": "category", "value": "long", "sortby": "3" } ], "BB": [ { "key_name": "category", "value": "long", "sortby": "5" } ], "CC": [ { "key_name": "category", "value": "short", "sortby": "1" } ] } const res = Object.keys(data).sort((a, b) => { return parseInt(data[a][0].sortby, 10) - parseInt(data[b][0].sortby, 10) }).map(key => ({ key, value: data[key] })); console.log(res)
Object.fromEntries(Object.entries(obj).sort(([key1, value1], [key2, value2]) => {
return value1[0].sortby - value2[0].sortby
}))
一行解决方案:
var o = { "AA": [ { "key_name": "category", "value": "long", "sortby": "3" } ], "BB": [ { "key_name": "category", "value": "long", "sortby": "5" } ], "CC": [ { "key_name": "category", "value": "short", "sortby": "1" } ] } o = Object.keys(o).sort(function(a, b){ return parseInt(o[a][0].sortby) - parseInt(o[b][0].sortby); }).reduce(function(acc, e){ acc[e] = o[e]; return acc; }, {}) console.log(o);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.