var array = [{id: 1, date:'Mar 12 2012 10:00:00 AM'}, {id: 2, date:'Mar 8 2012 08:00:00 AM'}];
array.sort(function(a, b) {
var c = new Date(a.date);
var d = new Date(b.date);
return c-d;
});
var sortBy = (function () {
var toString = Object.prototype.toString,
// default parser function
parse = function (x) { return x; },
// gets the item to be sorted
getItem = function (x) {
var isObject = x != null && typeof x === "object";
var isProp = isObject && this.prop in x;
return this.parser(isProp ? x[this.prop] : x);
};
/**
* Sorts an array of elements.
*
* @param {Array} array: the collection to sort
* @param {Object} cfg: the configuration options
* @property {String} cfg.prop: property name (if it is an Array of objects)
* @property {Boolean} cfg.desc: determines whether the sort is descending
* @property {Function} cfg.parser: function to parse the items to expected type
* @return {Array}
*/
return function sortby (array, cfg) {
if (!(array instanceof Array && array.length)) return [];
if (toString.call(cfg) !== "[object Object]") cfg = {};
if (typeof cfg.parser !== "function") cfg.parser = parse;
cfg.desc = !!cfg.desc ? -1 : 1;
return array.sort(function (a, b) {
a = getItem.call(cfg, a);
b = getItem.call(cfg, b);
return cfg.desc * (a < b ? -1 : +(a > b));
});
};
}());
最后,我们通过 "date" 财产作为 string ``` //sort the object by a property (ascending) //sorting takes into account uppercase and lowercase sortBy(data, { prop: "date" });
如果要忽略字母大小写,请设置 `"parser"` 回拨:
//sort the object by a property (descending) //sorting ignores uppercase and lowercase sortBy(data, { prop: "date", desc: true, parser: function (item) { //ignore case sensitive return item.toUpperCase(); } });
如果要将“日期”字段视为 `Date` 类型:
//sort the object by a property (ascending) //sorting parses each item to Date type sortBy(data, { prop: "date", parser: function (item) { return new Date(item); } });
myArray = [{transport: "Air",
load: "Vatican Vaticano",
created: "01/31/2020"},
{transport: "Air",
load: "Paris",
created: "01/30/2020"}]
myAarray.sort(function(a, b) {
var c = new Date(a.created);
var d = new Date(b.created);
return c-d;
});
var isDescending = true; //set to false for ascending
console.log(["8/2/2020","8/1/2020","8/13/2020", "8/2/2020"].sort((a,b) => isDescending ? new Date(b).getTime() - new Date(a).getTime() : new Date(a).getTime() - new Date(b).getTime()));
//Sort by day, then month, then year
for(i=0;i<=2; i++){
dataCourses.sort(function(a, b){
a = a.lastAccessed.split("/");
b = b.lastAccessed.split("/");
return a[i]>b[i] ? -1 : a[i]<b[i] ? 1 : 0;
});
}
我刚刚采用了上面描述的schwartzian变换,并将其作为函数。这需要一段时间 array ,排序 function 和一个布尔值作为输入:
function schwartzianSort(array,f,asc){
for (var i=array.length;i;){
var o = array[--i];
array[i] = [].concat(f.call(o,o,i),o);
}
array.sort(function(a,b){
for (var i=0,len=a.length;i<len;++i){
if (a[i]!=b[i]) return a[i]<b[i]?asc?-1:1:1;
}
return 0;
});
for (var i=array.length;i;){
array[--i]=array[i][array[i].length-1];
}
return array;
}
function schwartzianSort(array, f, asc) {
for (var i = array.length; i;) {
var o = array[--i];
array[i] = [].concat(f.call(o, o, i), o);
}
array.sort(function(a, b) {
for (var i = 0, len = a.length; i < len; ++i) {
if (a[i] != b[i]) return a[i] < b[i] ? asc ? -1 : 1 : 1;
}
return 0;
});
for (var i = array.length; i;) {
array[--i] = array[i][array[i].length - 1];
}
return array;
}
arr = []
arr.push({
date: new Date(1494434112806)
})
arr.push({
date: new Date(1494434118181)
})
arr.push({
date: new Date(1494434127341)
})
console.log(JSON.stringify(arr));
arr = schwartzianSort(arr, function(o) {
return o.date
}, false)
console.log("DESC", JSON.stringify(arr));
arr = schwartzianSort(arr, function(o) {
return o.date
}, true)
console.log("ASC", JSON.stringify(arr));
20条答案
按热度按时间nhjlsmyf1#
感谢上面那些精彩的回答。我想到了一个稍微复杂的答案。只针对那些想要比较不同答案的人。
wqnecbli2#
@phrogz的答案都很好,但这里有一个更简洁的答案:
使用箭头函数方式
可在此处找到:javascript中的排序日期
bt1cpqcv3#
更正json后,现在应该可以使用:
7ajki6be4#
您的数据需要进行一些更正:
更正数据后,可以使用以下代码:
v64noz0r5#
我推荐github:array sortby—一个
sortBy
使用schwartzian变换的方法但现在我们将尝试这种方法:sortby-old.js。
让我们创建一个方法来对数组进行排序,以便能够按某些属性排列对象。
创建排序函数
设置未排序的数据
使用它
最后,我们通过
"date"
财产作为string
```//sort the object by a property (ascending)
//sorting takes into account uppercase and lowercase
sortBy(data, { prop: "date" });
//sort the object by a property (descending)
//sorting ignores uppercase and lowercase
sortBy(data, {
prop: "date",
desc: true,
parser: function (item) {
//ignore case sensitive
return item.toUpperCase();
}
});
//sort the object by a property (ascending)
//sorting parses each item to Date type
sortBy(data, {
prop: "date",
parser: function (item) {
return new Date(item);
}
});
mwecs4sa6#
当您的日期采用这种格式(dd/mm/yyyy)时,应该这样做。
然后打电话
sortByDate(myArr);
f45qwnt87#
可以在下划线js中使用sortby。
http://underscorejs.org/#sortby
样本:
6qfn3psc8#
我将在这里添加这一点,因为一些用户可能无法解决如何反转这种排序方法。
要按“上来”排序,我们可以简单地交换a&b,如下所示:
注意
a
现在在左手边,并且b
在右边,:d!ws51t4hk9#
我个人使用以下方法对日期进行排序。
kuhbmx9i10#
v7pvogib11#
我能够使用以下行实现排序:
g2ieeal712#
谢谢你,甘尼什·萨纳普。按日期字段从旧到新对项目进行排序。使用它
92vpleto13#
使用es6 arrow函数,您可以进一步只编写一行简明代码(不包括变量声明)。
如。:
由于上述日期不存在时间,Dead对象将考虑以下排序时间:
00:00:00
该代码可用于升序和降序排序。只需更改
isDescending
根据需要设置变量。de90aj5v14#
对于希望按日期(英国格式)排序的任何人,我使用了以下方法:
vhmi4jdf15#
我刚刚采用了上面描述的schwartzian变换,并将其作为函数。这需要一段时间
array
,排序function
和一个布尔值作为输入: