繁体   English   中英

如何通过数组内的“sortby”键对这个对象进行排序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM