二维数据/对象的sort排序

1.arr=[[1,2],[4,5],[0,0]]根据[x,y] x+y值从小到大排序

arr.sort((a,b)=>{
  let x1=a[0];
  let y1=a[1];
  let x2=b[0];
  let y2=b[1];
  return (x1+y1)-(x2+y2);
})

2.obj={
‘a’:3,
‘b’:9,
‘c’:2
}根据obj的value值进行排序

// 提取对象的键
let keys = Object.keys(obj);

// 根据键对应的值进行排序
keys.sort((key1, key2) => {
  return obj[key1] - obj[key2];
});

console.log(keys); // 输出 ['b', 'c', 'a']

// 如果你想得到一个排序后的对象数组
let sortedArray = keys.map(key => ({ key: key, value: obj[key] }));

console.log(sortedArray);
// 输出 [{ key: 'b', value: 1 }, { key: 'c', value: 2 }, { key: 'a', value: 3 }]

3.一个数组,每一项是一个对象,有name、a、b、c四个属性,按照a属性降序排序,如果a属性相同按照b属性降序排序,如果b属性也相同按照c属性降序,如果abc都相同,按照name的字典序排序
arr=[{
name:‘abc’,
a:25,
b:15,
c:2,
},
{
name:‘b’,
a:25,
b:14,
c:20,
},
{
name:‘ac’,
a:25,
b:14,
c:20,
}
]

function sort(arr) {
  arr.sort((a, b) => {
    if (a.a !== b.a) {
      return b.a - a.a; // 降序排序
    }
    if (a.b !== b.b) {
      return b.b - a.b; // 降序排序
    }
    if (a.c !== b.c) {
      return b.c - a.c; // 降序排序
    }
    // 字典序排序
    return a.name.localeCompare(b.name);
  });
  return arr;
}

str1.localeCompare(str2, [locales], [options])用于比较字符串字典序的方法,
[locales] (可选): 用于指定语言环境,比如 ‘en’ 表示英语,‘zh’ 表示中文等。(字符串)
[options] (可选): 用于指定比较的选项,比如是否区分大小写、忽略空格等。(是一个对象)
localeCompare 会返回一个数字,表示两个字符串的比较结果:
如果 str1 小于 str2,返回一个负数。
如果 str1 等于 str2,返回 0。
如果 str1 大于 str2,返回一个正数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值