You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何忽略正负值,按字符串属性值对对象数组排序?

按指定规则排序JavaScript对象数组

需要对以下对象数组按照忽略正负,按绝对值从大到小排列,相同绝对值的正数在前、负数在后的规则排序:

原始数组:

var obj = [
  {band: "3", name: "positive"},
  {band: "-3", name: "positive"},
  {band: "1", name: "positive"},
  {band: "4", name: "positive"},
  {band: "-2", name: "positive"},
  {band: "2", name: "positive"}
];

期望排序后的结果:

var obj = [
  {band: "4", name: "positive"},
  {band: "3", name: "positive"},
  {band: "-3", name: "positive"},
  {band: "2", name: "positive"},
  {band: "-2", name: "positive"},
  {band: "1", name: "positive"}
];

解决方案

直接用数组的sort()方法,自定义排序逻辑即可:

obj.sort((a, b) => {
  const numA = Number(a.band);
  const numB = Number(b.band);
  // 先按绝对值降序排列
  const absDiff = Math.abs(numB) - Math.abs(numA);
  if (absDiff !== 0) {
    return absDiff;
  }
  // 绝对值相同时,正数在前
  return numB - numA;
});

逻辑说明

  • 先把band的字符串转成数值类型,避免字符串比较的坑(比如"10"会被当成比"2"小);
  • 优先比较两个值的绝对值,用后一个数的绝对值减去前一个,实现绝对值从大到小的排序;
  • 如果绝对值相等,直接比较数值本身,正数的数值大于负数,所以正数会排在负数前面。

内容的提问来源于stack exchange,提问作者KRISH JACKMAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:45:42