在JavaScript中按属性对JSON字符串排序



我是JavaScript新手,我正在做一些基本的练习。在我的代码中,我有一个JSON保存在一个字符串。我想按年龄属性排序,默认情况下,在表中首先显示年龄较大的员工。

var employees = '{"employees":[ {"name":"Lucas","surname":"White", "email":"email@gmail.com", "age":31, "work":{"Company":"userCompany", "role":"userRole"}, "car":[ {"brand":"userCar", "model":"userCar", "year":"userCar", "bollo":"userCar"}, ]},
{"name":"Mary","surname":"userSurname", "email":"email@gmail.com", "age":29, "work":{"Company":"userCompany", "role":"userRole"}, "car":[ {"brand":"userCar", "model":"userCar", "year":"userCar", "bollo":"userCar"} ]}, ]}'

我考虑将JSON员工解析为对象,以便使用JS方法来比较其值,但我认为我还没有正确的答案。

function compare(a,b) {
const obj = JSON.parse(employees);
if ( a.age < b.age ){
return -1;
}
else if ( a.age > b.age ){
return 1;
} else {
return 0;}
var compared = obj.compare();
console.log(compared);
}

还是……

function sortByAge(a,b){
const obj = JSON.parse(employees);
for(var i = 0; i < obj.employees.length; i++){
return parseInt (a.age) - parseInt (b.age); 
}
var sortedByAge = obj.sortByAge();
console.log(sortedByAge);
}

我错过了什么吗?谢谢你。

不要混在一起。写一个比较器函数:

function byAge(a,b) {
if (a.age < b.age) return -1;
else if (a.age > b.age) return 1;
else return 0;
}
解析JSON
const obj = JSON.parse(employees);

排序

obj.employees.sort(byAge);
console.log(obj);

奖励:通用比较器

function by(property) {
return function (a, b) {
if (a[property] < b[property]) return -1;
else if (a[property] > b[property]) return 1;
else return 0;
};
}
const obj = JSON.parse(employees);
obj.employees.sort(by('age'));
console.log(obj);

好处#2按数值排序的简写:

function byAge(a, b) {
return a.age - b.age;
}

可以工作,因为计算自然地得出小于0,大于0或完全为0的值,就像if/else if/else一样。

// even shorter as am arrow function
obj.employees.sort((a, b) => a.age - b.age);

相关内容

  • 没有找到相关文章

最新更新