如何对对象数组排序,使含空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
相关产品推荐
相关产品推荐

