如何在javascript或typescript中对数组进行排序

882 阅读2分钟

这篇博文,我们将学习如何在javascript或typescript中对数组进行排序。

我们将学习在typescript中进行排序

  • 如何在typescript中对字符串阵列进行排序?
  • 如何在javascript中对对象的数组进行排序?

typescript数组类提供了对元素进行排序的方法。

数组排序方法

数组类提供了对数组元素进行升序或降序排序的方法。

元素可以是简单的strings ,包含键和值的Object ,或者是Typescriptclasses

语法

Array.sort(ComparatorFunction)  

参数是ComparatorFunction 是一个回调函数,它指定了元素的顺序,如果没有传递,将应用默认排序。

如何对字符串数组进行排序 示例

用new Array()声明并初始化数组,字符串用逗号隔开 没有传递比较器函数,使用Array.sort()方法

var arrayStrings = new Array("one", "two", "there", "four");   
var sortedArray = arrayStrings.sort();   
console.log(""+sortedArray );  

输出是

four,one,there,two  

如何在Typescript中对Interfaces数组进行排序

对象可以直接用数组来创建,也可以创建一个接口。

这个Emp 对象包含idnames 。这个例子通过名称属性对对象进行排序。

首先创建Emp 接口。

 interface Emp {  
     id: number;  
     name: string;  
}

接下来,创建对象的数组,并用值进行初始化

var emps: Emp[] = [  
    { id: "5", name: "Kiran" },  
    { id: "1", name: "Frank" },  
    { id: "2", name: "Tom" },  
    { id: "51", name: "Abc" }  
]  

并为Emp 对象的Name 写一个比较函数

var compareName = function (emp1: Emp, emp2: Emp) {  
        if (emp1.name > emp2.name) { return -1; }  
        if (emp1.name < emp2.name) {return 1; }  
        return 0;  
    } 

最后用比较函数调用Array.sort()

var sortedArray = emps.sort(compareName);   
console.log(sortedArray );  

输出是

0: {id: "2", name: "Tom"}  
1: {id: "5", name: "Kiran"}  
2: {id: "1", name: "Frank"}  
3: {id: "51", name: "Abc"}  

object 包含key date 属性。

我们可以根据date ,以升序或降序对对象数据进行排序。

需要提供处理日期比较的比较器自定义代码。

第一个日期字符串被转换为一个内置的日期对象。

日期升序
这是一个例子,通过日期升序对对象的日期进行排序。

interface Emp {  
     id: number;  
     name: string;  
     date: Date;  
}  
var emps: Emp[] = [  
    { id: "5", name: "Kiran",date:"2018-05-05" },  
    { id: "1", name: "Frank",date:"2017-05-05"},  
    { id: "2", name: "Tom",date:"2016-05-05" },  
    { id: "51", name: "Abc" ,date:"2018-10-05"}  
]  
  
var compareDate = function (emp1: Emp, emp2: Emp) {  
    var emp1Date = new Date(emp1.date).getTime();  
    var emp2Date = new Date(emp2.date).getTime();  
    return emp1Date > emp2Date ? 1 : -1;    
}  
var sortedArray = emps.sort(compareDate);   
console.log(sortedArray );  

输出是

  
0: {id: "2", name: "Tom", date: "2016-05-05"}  
1: {id: "1", name: "Frank", date: "2017-05-05"}  
2: {id: "5", name: "Kiran", date: "2018-05-05"}  
3: {id: "51", name: "Abc", date: "2018-10-05"}  

我们将看到按降序排序的日期。
对象属性日期降序

var compareDate = function (emp1: Emp, emp2: Emp) {  
    var emp1Date = new Date(emp1.date).getTime();  
    var emp2Date = new Date(emp2.date).getTime();  
    return emp1Date > emp2Date ? -1 : 1;    
}  

输出是

0: {id: "51", name: "Abc", date: "2018-10-05"}  
1: {id: "5", name: "Kiran", date: "2018-05-05"}  
2: {id: "1", name: "Frank", date: "2017-05-05"}  
3: {id: "2", name: "Tom", date: "2016-05-05"}  

UnderscoreJs数组排序实例

UnderscoreJS是一个javascript库,它提供了很多实用功能。

它提供了sortBy函数,接受一个array 和一个function 作为参数。这个库可以使用npm包管理器在javascript或typescript应用程序中使用,可以使用npm命令安装。

下面是一个数组字符串降序排序的例子

var sortedArray=_.sortBy(["four", "one", "zero"], function (value) { return value.toLowerCase(); });  
console.log(sortedArray);  

输出:

["four","one","zero"]  

总结

在本教程中,你学到了数组声明和排序方法的初始化语法,如何用日期键对字符串、对象和接口阵列进行升序或降序排序。