簡體   English   中英

在 JavaScript 中按屬性對 JSON 字符串進行排序

[英]Sort JSON string by attribute in JavaScript

我是 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 或恰好為零的值,就像if / else if / else

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM