【问题标题】:How do I sort an objects array by id and name? [duplicate]如何按 id 和 name 对对象数组进行排序? [复制]
【发布时间】:2021-12-16 08:37:12
【问题描述】:

我想按idname 对对象数组进行排序。

样本数据:

 [
 {
      "case": {
        "name": "Exemple1"
      },
      "id": 3
    },
    {
      "case": {
        "name": "Exemple1"
      },
      "id": 2
    },
    {
      "case": {
        "name": "Exemple2"
      },
      "id": 1
    },
    {
      "case": {
        "name": "Exemple3"
      },
      "id": 4
    },
    {
      "case": {
        "name": "Exemple2"
      },
      "id": 6
    }
  ]

我想按idcase 对象中的name 字段排序?是否可以在排序中使用两个条件?

预期结果:

 [
    {
      "case": {
        "name": "Exemple1"
      },
      "id": 2
    },
        {
      "case": {
        "name": "Exemple1"
      },
      "id": 3
    },
    {
      "case": {
        "name": "Exemple2"
      },
      "id": 1
    },
    {
      "case": {
        "name": "Exemple2"
      },
      "id": 6
    },
    {
      "case": {
        "name": "Exemple3"
      },
      "id": 4
    }
 ]

如何在排序中使用两个条件?

【问题讨论】:

标签: javascript arrays sorting


【解决方案1】:

当然可以。

Array#sort method 带有一个名为compareFunction 的可选参数,它表示对数组中的任意两项进行排序时要执行的逻辑。

通过传递一个先比较 case.name 然后再比较 id 的函数,您可以按这两个标准对数组进行排序。这是一个简单的示例,但您可能希望添加错误检查,因此您不要尝试reading an undefined property

const unsortedData =  [
  { "case": { "name": "Exemple1" }, "id": 3 },
  { "case": { "name": "Exemple1" }, "id": 2 },
  { "case": { "name": "Exemple2" }, "id": 1 },
  { "case": { "name": "Exemple3" }, "id": 4 },
  { "case": { "name": "Exemple2" }, "id": 6 }
];

const sortedData = unsortedData.sort((a, b) => {
  if (a.case.name > b.case.name) return 1;
  if (a.case.name < b.case.name) return -1;
  if (a.id > b.id) return 1;
  if (a.id < b.id) return -1;
  return 0;
});

console.dir(sortedData);

【讨论】:

  • @D M,谢谢你的帮助,它的工作,我可以使用这个例子来更好地理解,并用于其他类型。
【解决方案2】:

您可以将array#sort 与自定义比较器一起使用。您可以使用条件 OR 来比较多个条件。

arr.sort((a,b) => a.case.name.localeCompare(b.case.name) || a.id - b.id)

const arr = [{ "case": { "name": "Exemple1" }, "id": 3 }, { "case": { "name": "Exemple1" }, "id": 2 }, { "case": { "name": "Exemple2" }, "id": 1 }, { "case": { "name": "Exemple3" }, "id": 4 }, { "case": { "name": "Exemple2" }, "id": 6 } ];
arr.sort((a,b) => a.case.name.localeCompare(b.case.name) || a.id - b.id);
console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 2013-05-28
    • 2013-02-24
    • 1970-01-01
    • 2019-12-17
    • 2020-05-18
    • 2012-06-23
    • 2022-01-20
    相关资源
    最近更新 更多