【问题标题】:Sort JSON string by attribute in JavaScript在 JavaScript 中按属性对 JSON 字符串进行排序
【发布时间】:2021-12-12 11:57:31
【问题描述】:

我是 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);
}

我有什么遗漏吗?谢谢。

【问题讨论】:

标签: javascript arrays json function sorting


【解决方案1】:

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

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);

Bonus #2 按数值排序的简写:

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

之所以有效,是因为计算自然会得出小于 0、大于 0 或恰好为零的值,就像 if/else if/else 一样。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2021-06-27
    相关资源
    最近更新 更多