在 JavaScript 中排序 JSON

Sorting JSON in JavaScript

我知道之前有人问过类似的问题,我在这里提到了这个问题:sort json object in javascript 但我仍然找不到问题的答案。所以我走了。我有一个 JSON 对象结构如下:

 [
  {
    "toothNumber": "01",
    "name": "John"
  },
  {
    "toothNumber": "18",
    "name": "John"
  },
  {
    "toothNumber": "19",
    "name": "John"
  },
  {
    "toothNumber": "17",
    "name": "John"
  },
  {
    "toothNumber": "01,32",
    "name": "John"
  },
  {
    "toothNumber": "25,32",
    "name": "John"
  },
  {
    "toothNumber": "",
    "name": "John"
  },
  {
    "toothNumber": "15",
    "name": "John"
  }
]

当我使用下面的代码进行排序时,我没有得到预期的结果:

json.sort(function(a, b){
    return a.toothNumber - b.toothNumber;
});

下面是实际结果,不是我想的那样。任何帮助将不胜感激。

实际结果:

[
  {
    "toothNumber": "",
    "name": "John"
  },
  {
    "toothNumber": "01",
    "name": "John"
  },
  {
    "toothNumber": "15",
    "name": "John"
  },
  {
    "toothNumber": "17",
    "name": "John"
  },
  {
    "toothNumber": "18",
    "name": "John"
  },
  {
    "toothNumber": "19",
    "name": "John"
  },
  {
    "toothNumber": "01,32",
    "name": "John"
  },
  {
    "toothNumber": "25,32",
    "name": "John"
  }
]

预期结果:

[
    {
        "toothNumber": "",
        "name": "John"
    },
    {
        "toothNumber": "01",
        "name": "John"
    },
    {
        "toothNumber": "01,32",
        "name": "John"
    },
    {
        "toothNumber": "15",
        "name": "John"
    },
    {
        "toothNumber": "17",
        "name": "John"
    },
    {
        "toothNumber": "18",
        "name": "John"
    },
    {
        "toothNumber": "19",
        "name": "John"
    },
    {
        "toothNumber": "25,32",
        "name": "John"
    }
]

按字符串排序,而不是数字比较。

const json = [  {    "toothNumber": "01",    "name": "John"  },  {    "toothNumber": "18",    "name": "John"  },  {    "toothNumber": "19",    "name": "John"  },  {    "toothNumber": "17",    "name": "John"  },  {    "toothNumber": "01,32",    "name": "John"  },  {    "toothNumber": "25,32",    "name": "John"  },  {    "toothNumber": "",    "name": "John"  },  {    "toothNumber": "15",    "name": "John"  }];

json.sort(function(a, b){
    return a.toothNumber > b.toothNumber ? 1 : (a.toothNumber === b.toothNumber ? 0 : -1 );
});

console.log(json);

你可以这样做

const json = [  {    "toothNumber": "01",    "name": "John"  },  {    "toothNumber": "18",    "name": "John"  },  {    "toothNumber": "19",    "name": "John"  },  {    "toothNumber": "17",    "name": "John"  },  {    "toothNumber": "01,32",    "name": "John"  },  {    "toothNumber": "25,32",    "name": "John"  },  {    "toothNumber": "",    "name": "John"  },  {    "toothNumber": "15",    "name": "John"  }];

json.sort(function(a, b) {
   return a.toothNumber.split(",")[0] - b.toothNumber.split(",")[0];
});

console.log(json)