是否有可能更改对象键顺序的数组?

时间:2019-05-11 10:47:55

标签: javascript arrays json sorting lodash

每个人,这是我的数组结构

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新手

2 个答案:

答案 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));