在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);

问题是我排序太晚了!如果您无论如何都需要编辑一个集合,并且您正在使用订阅来填充您的集合,那么请在订阅中添加代码!

一开始我没有包含我的完整代码,这导致了混淆,因为提供的答案都有效。这是一个很好的例子,说明为什么你应该包括完整的代码。