首页 > 解决方案 > 分组和升序,如何制作具有2个属性的对象数组?

问题描述

我有一个数组,它有对象。我需要按一个属性对这些对象进行分组,并按另一个属性对 ASC 进行分组。如何做到这两点?

arr = [{cNo:1,sCode:GARAN,price:200,liquidity:0.9},{cNo:2,sCode:AKBNK,price:50,liquidity:0.9},{cNo:3,sCode:ARCLK,price:150,liquidity:0.7},{cNo:4,sCode:SAHOL,price:150,liquidity:0.9},{cNo:5,sCode:EREGL,price:50,liquidity:0.75}

我正在按流动性属性进行分组,但我不知道如何与 sCode 属性一起进行

arr=arr.sort((a,b)=>(a.likidite) < (b.likidite) ? 1 :-1 )

结果是;

 arr = [{cNo:4,sCode:SAHOL,price:150,liquidity:0.9},{cNo:2,sCode:AKBNK,price:50,liquidity:0.9},{cNo:1,sCode:GARAN,price:200,liquidity:0.9},{cNo:5,sCode:EREGL,price:50,liquidity:0.75},
{cNo:3,sCode:ARCLK,price:150,liquidity:0.7}

我想要的结果;

arr = [{cNo:2,sCode:AKBNK,price:50,liquidity:0.9},{cNo:1,sCode:GARAN,price:200,liquidity:0.9},{cNo:4,sCode:SAHOL,price:150,liquidity:0.9},{cNo:5,sCode:EREGL,price:50,liquidity:0.75},{cNo:3,sCode:ARCLK,price:150,liquidity:0.7}

标签: javascriptnode.jsgroup-by

解决方案


只需扩展您的排序功能:

const arr = [{
  cNo: 1,
  sCode: 'GARAN',
  price: 200,
  liquidity: 0.9
}, {
  cNo: 2,
  sCode: 'AKBNK',
  price: 50,
  liquidity: 0.9
}, {
  cNo: 3,
  sCode: 'ARCLK',
  price: 150,
  liquidity: 0.7
}, {
  cNo: 4,
  sCode: 'SAHOL',
  price: 150,
  liquidity: 0.9
}, {
  cNo: 5,
  sCode: 'EREGL',
  price: 50,
  liquidity: 0.75
}];

arr.sort((a, b) => {
  if (a.liquidity < b.liquidity) {
    return 1;
  } else if (a.liquidity > b.liquidity) {
    return -1;
  } else if (a.sCode < b.sCode) {
    return -1;
  } else if (a.sCode > b.sCode) {
    return 1;
  } else {
    return 0;
  }
})

console.log(arr);


推荐阅读