我有一个具有几个键值对的对象数组,我需要根据'updated_at'对它们进行排序:
[
{
"updated_at" : "2012-01-01T06:25:24Z",
"foo" : "bar"
},
{
"updated_at" : "2012-01-09T11:25:13Z",
"foo" : "bar"
},
{
"updated_at" : "2012-01-05T04:13:24Z",
"foo" : "bar"
}
]
最有效的方法是什么?
你可以使用Lodash实用程序库来解决这个问题(它是一个非常有效的库):
Const data = [{
“updated_at”:“2012 - 01 - 01 t06:25:24z”,
“foo”:“酒吧”
},
{
“updated_at”:“2012 - 01 - 09年t11:25:13z”,
“foo”:“酒吧”
},
{
“updated_at”:“2012 - 01 - 05 t04:13:24z”,
“foo”:“酒吧”
}
]
const ordered = _.orderBy(
数据,
函数(项){
返回item.updated_at;
}
);
console.log(命令)
< script src = " https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js " > < /脚本>
你可以在这里找到文档:https://lodash.com/docs/4.17.15#orderBy
我面对同样的事情,所以我用一个通用的为什么处理这个,我为此建立了一个函数:
/ / example:
/ /阵列:[姓名:’idan’workerType:(3))、姓名:’stas’workerType: 5),姓名:’kirill’,workerType: (2))]
/ / keyField:’workerType’
// keysArray:[“4”、“3”、“2”、“5”、“6”]
sortByArrayOfKeys = (array, keyField, keysArray) => {
array.sort((a, b) => {
const aIndex = keysArray.indexOf(a[keyField])
const bIndex = keysArray.indexOf(b[keyField])
if (aIndex < bIndex) return -1;
if (aIndex > bIndex) return 1;
return 0;
})
}
你可以创建一个闭包并这样传递它
这是我的例子
$.get('https://data.seattle.gov/resource/3k2p-39jp.json?$limit=10&$where=within_circle(incident_location, 47.594972, -122.331518, 1609.34)',
function(responce) {
var filter = 'event_clearance_group', //sort by key group name
data = responce;
var compare = function (filter) {
return function (a,b) {
var a = a[filter],
b = b[filter];
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
};
};
filter = compare(filter); //set filter
console.log(data.sort(filter));
});
今天可以结合@knowbody (https://stackoverflow.com/a/42418963/6778546)和@Rocket Hazmat (https://stackoverflow.com/a/8837511/6778546)的回答来提供ES2015的支持和正确的日期处理:
var arr = [{
"updated_at": "2012-01-01T06:25:24Z",
"foo": "bar"
},
{
"updated_at": "2012-01-09T11:25:13Z",
"foo": "bar"
},
{
"updated_at": "2012-01-05T04:13:24Z",
"foo": "bar"
}
];
arr.sort((a, b) => {
const dateA = new Date(a.updated_at);
const dateB = new Date(b.updated_at);
return dateA - dateB;
});