对数组对象中的多个字段进行排序

我有这样的数组 obj:

[{ A: '24/12/2020', J: 54106, }, { A: '10/dd/2020', J: 54103 }, { A: 'mm/29/2020', J: 54103 }]

我想先对 J 字段进行排序,然后对 A 字段进行排序..但是排序时遇到问题,我想要这样的结果:

[ { A: '10/dd/2020', J: 54103 }, { A: 'mm/29/2020', J: 54103 }, { A: '24/12/2020', J: 54106, }]

但数据响应是:

[{ A: 'mm/29/2020', J: 54103 }, { A: '10/dd/2020', J: 54103 }, { A: '24/12/2020', J: 54106, }]

我的代码在这里:

result.sort(function (a, b) {
  return parseFloat(a.J) - parseFloat(b.J) || (a.A) - (b.A);
});

我认为它需要从数字到文本排序,但事实并非如此


温温酱
浏览 113回答 1
1回答

绝地无双

只需编写一个比较函数即可对其进行排序。首先比较J字段,然后比较A字段。const data = [  { A: '24/12/2020', J: 54106 },  { A: '10/dd/2020', J: 54103 },  { A: 'mm/29/2020', J: 54103 },];const cmp = (x, y) => {  if (x.J === y.J) {    return x.A.localeCompare(y.A);  }  return x.J > y.J ? 1 : -1;};const ret = data.sort(cmp);console.log(ret);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript