我有数组对象
var myObj = [
{'week2Volume': 'asdsadfd'},
{'week1Volume': 'masdasaf'},
{'week3Volume': 'dsfdsfsdf'}
]
如何根据键对此进行排序 我的意思是我想要结果
var myObj = [
{'week1Volume': 'masdasaf'},
{'week2Volume': 'asdsadfd'},
{'week3Volume': 'dsfdsfsdf'}
]
我尝试了什么 -
_.sortBy(myObj, function(o) { return o.toLowerCase(); })
我正在使用下划线请建议我任何解决方案。任何JavaScript原生解决方案也都可以。 感谢。
答案 0 :(得分:0)
_.mixin({
'sortKeysBy': function (obj, comparator) {
var keys = _.sortBy(_.keys(obj), function (key) {
return comparator ? comparator(obj[key], key) : key;
});
return _.object(keys, _.map(keys, function (key) {
return obj[key];
}));
}
});
然后:
var obj = {b: 3, c: 2, a: 1};
_.sortKeysBy(obj);
// {a: 1, b: 3, c: 2}
_.sortKeysBy(obj, function (value, key) {
return value;
});
// {a: 1, c: 2, b: 3}
来源:gist
<强>更新强>:
你有一个数组,而不是一个对象。所以你可以在没有任何插件的情况下对它进行排序。
_.sortBy(myObj, function(o) {
// return Object.keys(o)[0];
return _.keys(o)[0];
});
答案 1 :(得分:0)
Underscore's documentation on sortBy()
:
返回(稳定)排序的列表副本,按通过iteratee 运行每个值的结果按升序排列。
(强调我的)
迭代器应该返回键进行排序:
_.sortBy(myObj, function(o){ return _.keys(o)[0]; })
通过第一个键过滤返回预期的对象。
_.keys(o);
实际上返回了一组键。如果您希望更多密钥并且喜欢限制按键排序,您可以将结果传递给_.filter()
:
_.sortBy(myObj, function(o) {
// filter the set of keys
return _.filter(_.keys(o), function(key) {
// filter key by this matcher
return /^week[0-9]+Volume$/.test(key);
})[0];
});
这样,它为
提供了相同的结果var myObj = [
{'b': 1, 'week2Volume': 'asdsadfd'},
{'c': 2, 'week1Volume': 'masdasaf'},
{'a': 3, 'week3Volume': 'dsfdsfsdf'}
]
答案 2 :(得分:0)
您可以使用Javscript的sort函数对数组进行排序,如下所示。
var myObj = [
{'week2Volume': 'asdsadfd'},
{'week1Volume': 'masdasaf'},
{'week3Volume': 'dsfdsfsdf'}
];
var sorted = myObj.sort(function (a, b) {
return Object.keys(a)[0] > Object.keys(b)[0];
});
//This is the sorted array
console.dir(sorted);
希望这会有所帮助。如有任何问题请咨询。