我可以定义一个数字数组并像这样对它们进行排序
var array = ['2', undefined, '1'];
array.sort((a, b) => a - b);
console.log(array);
输出是1, 2, null
.
我有一个可以包含数字属性的对象数组,我可以这样定义它。并非所有对象都具有 number 属性。现在我想按 number 属性对这个对象数组进行排序。所以我尝试了这个:
var array = [
{ number: 2 },
{},
{ number: 1 }
];
array.sort((a, b) => a.number - b.number);
console.log(array);
输出不是我想要的。我明白了2, undefined, 1
.
如果数组中的所有对象都定义了 number 属性,则相同的排序函数会产生1, 2
,这是我期望的结果。
var array = [
{ number: 2 },
{ number: 1 }
];
array.sort((a, b) => a.number - b.number);
console.log(array);
所以我的问题是,按属性对对象数组进行排序的最佳方法是什么,其中属性并不总是定义的。预期结果是对象按属性(数字)排序,未定义该属性的对象位于数组末尾。
到目前为止,我唯一的解决方案是迭代该集合,如果未定义该属性,则将该属性设置为 0 或null
。然后我可以将对象数组传递给排序函数,它会按我想要的方式工作。还有比这更好的方法吗?
杰斯小提琴:https://jsfiddle.net/t2r6z13e/1/
您可以返回 a 的存在与否之间的差异number
被比较的每个对象的属性,或者返回它们的差异number
属性(如果两个对象都具有所述属性):
var array = [
{ number: 2 },
{},
{ number: 1 }
];
array.sort((a, b) => {
const aHas = typeof a.number !== 'undefined';
const bHas = typeof b.number !== 'undefined';
return (bHas - aHas) || (aHas === true && a.number - b.number) || 0;
});
console.log(array);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)