在Typescript中根据字符串属性对对象数组进行排序
Sorting an array of objects based on string property in Typescript
我有一个像这样的对象数组:
0: {id: "743", name: "F"}
1: {id: "786", name: "S"}
2: {id: "903", name: "B"}
3: {id: "988", name: "L"}
4: {id: "1202", name: "S"}
5: {id: "1355", name: "H"}
6: {id: "1374", name: "R"}
我需要根据 'name' 属性.
对对象数组进行排序
我四处寻找答案并尝试了每一个,但没有任何乐趣。
我遇到的两个主要答案是:
Array.sort((leftSide, rightSide): number => {
if (leftSide.name.toLowerCase() < rightSide.name.toLowerCase()) return -1;
if (leftSide.name.toLowerCase() > rightSide.name.toLowerCase()) return 1;
return 0;
});
和
Array.sort((a, b) => a.name.localeCompare(b.name))
这两个都给我相同的未排序数组输出。还有其他方法吗?我正在使用 Angular 7.
完整代码:
getDeviceBrands(): void {
this.deviceBrands = new Array<DeviceBrand>();
const parentNodeId = 0;
this.chartsService.getCatalogNodes(parentNodeId, this.catalogName).subscribe(catalogNodes => {
catalogNodes.forEach(n => {
this.deviceBrands.push({
id: n.CatalogNodeId.toString(),
name: n.Name
});
});
});
console.log(this.deviceBrands);
const sorted = this.deviceBrands.sort((a, b) => a.name < b.name ? -1 : 1);
console.log(sorted);
}
我不确定为什么上面的方法对你不起作用;但以下对我有用:
const x = [
{ id: "743", name: "F" },
{ id: "786", name: "S" },
{ id: "903", name: "B" },
{ id: "988", name: "L" },
{ id: "1202", name: "S" },
{ id: "1355", name: "H" },
{ id: "1374", name: "R" },
];
const sorted = x.sort((a, b) => a.name < b.name ? -1 : 1);
console.log(sorted);
从 运行 你的代码来看,它似乎也应该可以工作。我从您展示的示例中猜测您在名为 Array
的变量中使用数组,这不是一个好主意,因为 Array
已在 javascript 中使用.
const Array = [
{ id: "743", name: "F" },
{ id: "786", name: "S" },
{ id: "903", name: "B" },
{ id: "988", name: "L" },
{ id: "1202", name: "S" },
{ id: "1355", name: "H" },
{ id: "1374", name: "R" },
];
const sorted = Array.sort((leftSide, rightSide) => {
if (leftSide.name.toLowerCase() < rightSide.name.toLowerCase()) return -1;
if (leftSide.name.toLowerCase() > rightSide.name.toLowerCase()) return 1;
return 0;
});
console.log(sorted);
问题是我排序太晚了!如果您无论如何都需要编辑一个集合,并且您正在使用订阅来填充您的集合,那么请在订阅中添加代码!
一开始我没有包含我的完整代码,这导致了混淆,因为提供的答案都有效。这是一个很好的例子,说明为什么你应该包括完整的代码。
我有一个像这样的对象数组:
0: {id: "743", name: "F"}
1: {id: "786", name: "S"}
2: {id: "903", name: "B"}
3: {id: "988", name: "L"}
4: {id: "1202", name: "S"}
5: {id: "1355", name: "H"}
6: {id: "1374", name: "R"}
我需要根据 'name' 属性.
对对象数组进行排序我四处寻找答案并尝试了每一个,但没有任何乐趣。 我遇到的两个主要答案是:
Array.sort((leftSide, rightSide): number => {
if (leftSide.name.toLowerCase() < rightSide.name.toLowerCase()) return -1;
if (leftSide.name.toLowerCase() > rightSide.name.toLowerCase()) return 1;
return 0;
});
和
Array.sort((a, b) => a.name.localeCompare(b.name))
这两个都给我相同的未排序数组输出。还有其他方法吗?我正在使用 Angular 7.
完整代码:
getDeviceBrands(): void {
this.deviceBrands = new Array<DeviceBrand>();
const parentNodeId = 0;
this.chartsService.getCatalogNodes(parentNodeId, this.catalogName).subscribe(catalogNodes => {
catalogNodes.forEach(n => {
this.deviceBrands.push({
id: n.CatalogNodeId.toString(),
name: n.Name
});
});
});
console.log(this.deviceBrands);
const sorted = this.deviceBrands.sort((a, b) => a.name < b.name ? -1 : 1);
console.log(sorted);
}
我不确定为什么上面的方法对你不起作用;但以下对我有用:
const x = [
{ id: "743", name: "F" },
{ id: "786", name: "S" },
{ id: "903", name: "B" },
{ id: "988", name: "L" },
{ id: "1202", name: "S" },
{ id: "1355", name: "H" },
{ id: "1374", name: "R" },
];
const sorted = x.sort((a, b) => a.name < b.name ? -1 : 1);
console.log(sorted);
从 运行 你的代码来看,它似乎也应该可以工作。我从您展示的示例中猜测您在名为 Array
的变量中使用数组,这不是一个好主意,因为 Array
已在 javascript 中使用.
const Array = [
{ id: "743", name: "F" },
{ id: "786", name: "S" },
{ id: "903", name: "B" },
{ id: "988", name: "L" },
{ id: "1202", name: "S" },
{ id: "1355", name: "H" },
{ id: "1374", name: "R" },
];
const sorted = Array.sort((leftSide, rightSide) => {
if (leftSide.name.toLowerCase() < rightSide.name.toLowerCase()) return -1;
if (leftSide.name.toLowerCase() > rightSide.name.toLowerCase()) return 1;
return 0;
});
console.log(sorted);
问题是我排序太晚了!如果您无论如何都需要编辑一个集合,并且您正在使用订阅来填充您的集合,那么请在订阅中添加代码!
一开始我没有包含我的完整代码,这导致了混淆,因为提供的答案都有效。这是一个很好的例子,说明为什么你应该包括完整的代码。