首页 > 解决方案 > 如何通过数组内的“sortby”键对该对象进行排序?

问题描述

            {
                "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”对这个对象进行排序,并且它在一个数组中?任何人都可以帮忙吗?

标签: javascriptvue.js

解决方案


您应该创建一个对象键数组,然后根据数据中的属性值对其进行排序,然后将它们映射到一个新对象中:

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)


推荐阅读