gpt4 book ai didi

Javascript:按数字属性对对象数组进行排序,其中包括未定义的属性

转载 作者:行者123 更新时间:2023-11-28 12:13:09 25 4
gpt4 key购买 nike

我可以定义一个数字数组并像这样对它们进行排序

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,未定义,1

如果数组中的所有对象都定义了 number 属性,则相同的排序函数会生成 1, 2,这是我期望的结果。

var array = [
{ number: 2 },
{ number: 1 }
];
array.sort((a, b) => a.number - b.number);
console.log(array);

所以我的问题是,按属性对对象数组进行排序的最佳方法是什么,其中属性并不总是定义的。预期结果是对象按属性(数字)排序,未定义该属性的对象位于数组末尾。

到目前为止,我唯一的解决方案是迭代该集合,如果未定义该属性,则将该属性设置为 0 或 null。然后我可以将对象数组传递给排序函数,它会按我想要的方式工作。还有比这更好的方法吗?

Jfiddle:https://jsfiddle.net/t2r6z13e/1/

最佳答案

您可以返回正在比较的每个对象上是否存在 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);

关于Javascript:按数字属性对对象数组进行排序,其中包括未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56312968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com