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); } });
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;
});
array.sort(function(a,b){
// Turn your strings into dates, and then subtract them
// to get a value that is either negative, positive, or zero.
return new Date(b.date) - new Date(a.date);
});
20条答案
按热度按时间v64noz0r16#
我推荐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);
}
});
7ajki6be17#
您的数据需要进行一些更正:
更正数据后,可以使用以下代码:
bt1cpqcv18#
更正json后,现在应该可以使用:
wqnecbli19#
@phrogz的答案都很好,但这里有一个更简洁的答案:
使用箭头函数方式
可在此处找到:javascript中的排序日期
hsvhsicv20#
最简单的答案
更一般的答案
或者更简洁地说:
通俗有力的回答
定义自定义的不可枚举
sortBy
函数在所有数组上使用schwartzian变换:像这样使用它:
如果您的日期不可直接比较,请从中选择一个可比较的日期,例如。
如果返回一个值数组,还可以使用此选项按多个条件进行排序:
看见http://phrogz.net/js/array.prototype.sortby.js 更多细节。