将自定义排序应用于打字稿中的对象数组

问题描述 投票:2回答:3

我有一个数组对象,我想在Angular Project中对其应用自定义排序。

我想要实现的简单示例:每个对象都有属性ID和类别。

let cars: { id: number, category: string }[] = [
    { "id": 3, "category": "fast car" },
    { "id": 0, "category": "fast car" },
    { "id": 1, "category": "slow car" },
    { "id": 2, "category": "fast car" }
];

否,我想对数组进行排序。首先,应该显示每个“快速车”(如果按ID进行多种排序),然后显示“慢车”(如果也按ID进行多种排序)。

{ "id": 0, "category": "fast car" }
{ "id": 2, "category": "fast car" }
{ "id": 3, "category": "fast car" }
{ "id": 1, "category": "slow car" }

我不太了解.sort函数的工作方式。由于iam是编程的新手,因此在这种情况下对使用.sort()进行详细的描述将很有帮助。

先谢谢您,英语不好。

angular typescript
3个回答
1
投票

您可以将自定义的比较函数传递给数组的sort方法:

cars.sort((a, b) => {
  // your custom logic here. 'a' stands for first item, 'b' - for second item and so on

  // the implementation can be like:
  if (a.category.startsWith('fast') && b.category.startsWith('slow')) {
    return 1; // 1 means positive number indicating that a > b
  } else if (a.category.startsWith('slow') && b.category.startsWith('fast') {
    return -1; // -1 - a negative number indicating a < b
  } else {
    // this block will be executed if both categories are 'slow' or 'fast'
    return a.id - b.id; // we are subtracting IDs to receive some number, either negative or positive. Depending on what number is returned the elements will be either replaced or not.
  }
})

1
投票

可以创建自己的规则进行排序,然后仅使用Vanilla JavaScript的sort函数:

let array = [
    { "id": 3, "category": "fast car" },
    { "id": 0, "category": "fast car" },
    { "id": 1, "category": "slow car" },
    { "id": 2, "category": "fast car" }
]

let order = { 'fast car': 1, 'slow car': 2};

array.sort(function (a, b) {
    return order[a.category] - order[b.category];
});

console.log(array);

0
投票

1)用于显示每个快车的第一个

var orders = ["fast car","slow car"];

2)用于显示每辆慢车首先显示>

var orders = ["slow car","fast car"];

3)对象数组

var cars = [
    { "id": 3, "category": "fast car" },
    { "id": 0, "category": "fast car" },
    { "id": 1, "category": "slow car" },
    { "id": 2, "category": "fast car" }
]

4)逻辑应为

var sortedArray = cars.sort(function(a,b) { 
       return (orders.indexOf(a.category)) - (orders.indexOf(b.category));
});
console.log(sortedArray);
© www.soinside.com 2019 - 2024. All rights reserved.