扩展数组Javascript

时间:2019-05-24 16:25:40

标签: javascript arrays

hi,我想按从mysql返回的日期对本机数组进行排序。我想扩展本机数组,因此不必一遍又一遍地键入相同的方法

我该如何实现?

这是我的排序:

[...].sort((a, b) => {
    return new Date(b.timestamp) - new Date(a.timestamp);
});

1 个答案:

答案 0 :(得分:4)

我不是100%相信这确实比仅将数组传递给函数更好……但是您可以将排序包装在函数中并将其放在数组原型上。这样做的方便之处在于只能使用dateSort()进行调用,但缺乏传递回调的灵活性:

Array.prototype.dateSort = function(desc = true) {
    this.sort((a, b) => {
      if (!desc) [a, b] = [b,a]
      return new Date(b.timestamp) - new Date(a.timestamp);
    });
  }

// Prevent dateSort from showing up when iterating over object keys:
 Object.defineProperty(Array.prototype, 'dateSort',{
    enumerable: false
  });

let arr = [
  {timestamp: '1995-12-17T03:24:00'},
  {timestamp: '1995-12-17T01:24:00'},
  {timestamp: '1995-12-17T02:24:00'},
  {timestamp: '1995-12-17T00:24:00'}
]

arr.dateSort()
console.log(arr)

arr.dateSort(false)
console.log(arr)

for (let i in arr){
 // no datesort when enumerating
 console.log(i)
}