打字稿 - 排序通用数组

时间:2016-11-06 15:49:50

标签: arrays typescript typescript-typings typescript2.0

我正在尝试在typescript中实现一个函数,用户可以在其中传递array个对象和其中一个对象的属性,并通过用户选择的属性返回列表顺序

function OrderByArray(values: any[], orderType: any) { 
    //TODO: implement code
    return values;
} 

有什么办法吗?我知道如何对数组进行排序,但我不知道如何允许通过它发送typeof对象和顺序。

谢谢!

2 个答案:

答案 0 :(得分:7)

您可以使用Array.sort方法:

function OrderByArray(values: any[], orderType: any) { 
    return values.sort((a, b) => {
        if (a[orderType] < b[orderType]) {
            return -1;
        }

        if (a[orderType] > b[orderType]) {
            return 1;
        }

        return 0
    });
}

我不确定item[orderType]的价值是什么,因此您可能需要更改if

修改

使用它:

let animals = [{ name: "cat" }, { name: "dog" }, { name: "lion" }];
let cars = [{ manufacturor: "ford" }, { manufacturor: "mazda" }, { manufacturor: "fiat" }];

console.log(OrderByArray(animals, "name").map(item => item.name)); // ["cat", "dog", "lion"]
console.log(OrderByArray(cars, "manufacturor").map(item => item.manufacturor)); // ["fiat", "ford", "mazda"]

code in playground

第二次编辑

typescript 2.1中你可以做到:

function OrderByArray<T, K extends keyof T>(values: T[], orderType: K) {
    ...
}

More about keyof

答案 1 :(得分:0)

您可能不需要以mentioned in MDN的形式返回values.sort(...)的结果

Array.sort实际上会更改或更改其排序的数组