我有一个数组对象,我想在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()进行详细的描述将很有帮助。
先谢谢您,英语不好。
您可以将自定义的比较函数传递给数组的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.
}
})
可以创建自己的规则进行排序,然后仅使用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);
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);