var arr = ['2016-09-09', '2015-12-30', '2016-01-04', '2011-09-12'];
Array.prototype.sortFn = function() {
var arr2 = []
var json = {};
for (var index = 0, len = this.length; index < len; index++) {
json[new Date(this[index]).getTime()] = this[index];
arr2.push(new Date(this[index]).getTime());
}
arr2.sort();
for (var j = 0; j < arr2.length; j++) {
this[j] = json[arr2[j]];
}
return this;
}
console.log(arr.sortFn())
上面的代码实现了我们的要求,下面介绍一下它的实现过程。
一.代码注释:
(1).var arr = [‘2016-09-09’, ‘2015-12-30’, ‘2016-01-04’, ‘2011-09-12’],数组存储的是要排序的时间日期。
(2).Array.prototype.sortFn = function() {},为数组对象实例添加一个实例方法,它实现了排序效果。
(3).var arr2 = [],声明一个数组用来声明时间戳。
(4).var json = {},声明一个对象,对象属性是时间戳,属性值是时间日期在原数组中的索引。
(5).for (var index = 0, len = this.length; index < len; index++) {},通过for循环进行遍历。
(6).json[new Date(this[index]).getTime()] = this[index],时间戳作为属性,日期作为属性值。
(7).arr2.push(new Date(this[index]).getTime()),把时间戳压入数组。
(8).arr2.sort(function sortFunction(a,b){
return a-b;
}),实现数组值由小到大排序。
(9).for (var j = 0; j < arr2.length; j++) {
arr[j] = json[arr2[j]];
}
(10).for (var j = 0; j < arr2.length; j++) {
this[j] = json[arr2[j]];
},由于arr2中的时间戳是由小到大排序的,所以arr数组的内容也会被重置为由小到大排序。
(11).return this,可以实现链式调用。