具有未定义和空值的排序对象数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有未定义和空值的排序对象数组相关的知识,希望对你有一定的参考价值。
如何使用javascript对具有空值和未定义值的对象数组进行排序。我的目标是首先显示具有“ jobTitle”属性的项目,然后按等级对它们进行排序,然后再对没有“ jobTitle”属性的项目进行按等级排序。数据:
data = [
{name: 'John', rating: null},
{name: 'Ethel', rating: 1.34, jobTitle: 'engineer'},
{name: 'Abba', rating: 5.44},
{name: 'Harry', rating: 0.44, jobTitle: 'plumber'}
]
在按jobTitle对数据进行排序,然后对其进行评级之后,应该像:
[
{name: 'Ethel', rating: 1.34, jobTitle: 'engineer'},
{name: 'Harry', rating: 0.44, jobTitle: 'plumber'},
{name: 'Abba', rating: 5.44},
{name: 'John', rating: null}
]
我尝试了许多类似的变体:
data.sort(function (a, b) {
var x = a[key]; var y = b[key];
return ((x > y) ? -1 : ((x < y) ? 1 : 0));
});
,但不适用于未定义和空值。我不想使用低质量的解决方案,例如创建新的数组,填充数据并合并它们。如果可能,我想用一种方法实现。
答案
如果a不是数字,则仅返回1;如果b不是数字,则返回-1,否则返回1-b
data = [
{name: 'John', rating: null},
{name: 'Ethel', rating: 1.34, jobTitle: 'engineer'},
{name: 'Abba', rating: 5.44},
{name: 'Harry', rating: 0.44, jobTitle: 'plumber'}
]
data.sort(({rating:a}, {rating:b}) => {
if (typeof a !== 'number') return 1;
if (typeof b !== 'number') return -1;
return a-b;
});
console.log(data);
另一答案
在排序函数中,您可以检查值是null
还是undefined
,并在这种情况下返回1
,因此将其排序到数组的末尾。附带说明:您正在排序数组,而不是JSON字符串。 JSON字符串有效时,不能包含undefined
原语值。
data.sort(function (a, b) {
var x = a[key];
var y = b[key];
if (x === null || x === undefined) {
return 1;
}
return y - x;
});
以上是关于具有未定义和空值的排序对象数组的主要内容,如果未能解决你的问题,请参考以下文章