基于具有不同数据类型的两个键,按升序排列对象数组

问题描述 投票:0回答:1

我想基于两个属性以升序对数组进行排序。

我有下面的数据数组,看起来像

[
  {
    id: 1,
    name: 'ABP',
    code: 1460,
    subCode: '0010'
  },
  {
    id: 2,
    name: 'GKY',
    code: 1460,
    subCode: '0030'
  },
  {
    id: 3,
    name: 'CPT',
    code: 1410,
    subCode: '0070'
  },
  {
    id: 4,
    name: 'KLB',
    code: 1470,
    subCode: '0050'
  },
  {
    id: 5,
    name: 'POL',
    code: 1430,
    subCode: '0050'
  },
  {
    id: 6,
    name: 'FVB',
    code: 1410,
    subCode: '0050'
  },
]

我想排序

[
  {
    id: 6,
    name: 'FVB',
    code: 1410,
    subCode: '0050'
  },
  {
    id: 3,
    name: 'CPT',
    code: 1410,
    subCode: '0070'
  },
  {
    id: 5,
    name: 'POL',
    code: 1430,
    subCode: '0050'
  },
  {
    id: 1,
    name: 'ABP',
    code: 1460,
    subCode: '0010'
  },
  {
    id: 2,
    name: 'GKY',
    code: 1460,
    subCode: '0030'
  },
  {
    id: 4,
    name: 'KLB',
    code: 1470,
    subCode: '0050'
  },
]

我想基于code属性以升序对数组进行排序,如果相同的code存在多个项目,那么我想基于subCode属性的code对数组进行排序。

我在这里面临的问题是,subCode是字符串,code是数字。我已经尝试过使用array.sort并通过将subCode解析为整数,但是它返回了我不理解的另一个数字。

javascript arrays sorting
1个回答
1
投票

您可以减去compareFunction中的代码属性。如果ab都具有相同的code属性,则||运算符将减去subCode属性。 -运算符会将字符串强制转换为数字,并将返回数字值。

const input=[{id:1,name:"ABP",code:1460,subCode:"0010"},{id:2,name:"GKY",code:1460,subCode:"0030"},{id:3,name:"CPT",code:1410,subCode:"0070"},{id:4,name:"KLB",code:1470,subCode:"0050"},{id:5,name:"POL",code:1430,subCode:"0050"},{id:6,name:"FVB",code:1410,subCode:"0050"},];

input.sort((a, b) => a.code - b.code || a.subCode - b.subCode)

console.log(input)
© www.soinside.com 2019 - 2024. All rights reserved.