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

如何对对象数组排序,使含空num1或num2属性的对象位于数组末尾?

如何对对象数组排序,使含空num1或num2属性的对象位于数组末尾?

嘿,我来帮你搞定这个排序问题~ 你的需求是把那些num1或者num2为空数组的对象挪到数组最后,对吧?先看看你原来的写法为啥不行:你的排序函数里的表达式语法和逻辑都有点混乱,比如!!y.num1.length ==0- !!x.num1.length ==0这种写法,运算符优先级和判断逻辑都不对,自然达不到预期效果。

给你一个清晰可行的方案,核心思路是先判断每个对象是否属于「需要后置」的类别,再根据这个类别来调整排序顺序:

步骤1:明确判断条件

对于数组里的每个对象,我们可以用!obj.num1.length || !obj.num2.length来判断它是否需要放到最后——因为空数组的length是0,!0会返回true,只要num1或num2有一个为空,这个表达式就会是true。

步骤2:编写正确的排序函数

我们在排序回调里对比两个对象的「后置状态」,让不需要后置的对象排在前面,需要后置的排在后面。如果两个对象状态相同,就保持它们原来的相对顺序(稳定排序)。

完整代码示例如下:

const data = {
  "risks": [
    {
      "id": "22",
      "name": true,
      "surname": 0.5,
      "age": 0.75,
      "heigth": 50,
      "num1": [],
      "num2": []
    },
    {
      "id": "55",
      "name": true,
      "surname": 0.5,
      "age": 0.75,
      "heigth": 50,
      "num1": [],
      "num2": []
    },
    {
      "id": "33",
      "name": true,
      "surname": 0.5,
      "age": 0.75,
      "heigth": 50,
      "num1": [1,2,3,4,5],
      "num2": [4,5,6,9]
    }
  ]
};

// 执行排序
data.risks.sort((x, y) => {
  const xNeedsToBeLast = !x.num1.length || !x.num2.length;
  const yNeedsToBeLast = !y.num1.length || !y.num2.length;

  // 核心逻辑:
  // 如果x要后置但y不用,x排后面(返回1)
  // 如果y要后置但x不用,y排后面(返回-1)
  // 否则保持原顺序(返回0)
  if (xNeedsToBeLast && !yNeedsToBeLast) {
    return 1;
  } else if (!xNeedsToBeLast && yNeedsToBeLast) {
    return -1;
  } else {
    return 0;
  }
});

// 打印结果验证
console.log(data.risks);

运行这段代码后,你会看到id:33的对象排在最前面,另外两个空数组的对象在最后,完全符合你的需求~

备注:内容来源于stack exchange,提问作者john

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 14:23:04