Dan*_*lan 28 javascript underscore.js lodash
我想做这样的事情:
var data = [
{
sortData: {a: 'a', b: 2}
},
{
sortData: {a: 'a', b: 1}
},
{
sortData: {a: 'b', b: 5}
},
{
sortData: {a: 'a', b: 3}
}
];
data = _.sortBy(data, ["sortData.a", "sortData.b"]);
_.map(data, function(element) {console.log(element.sortData.a + " " + element.sortData.b);});
Run Code Online (Sandbox Code Playgroud)
并输出这个:
"a 1"
"a 2"
"a 3"
"b 5"
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,数组仍以原始形式排序. 如果字段没有嵌套在内部,这将起作用sortData
. 如何使用lodash/underscore按多个嵌套字段对对象数组进行排序?
我把它变成了一个lodash功能请求:https://github.com/lodash/lodash/issues/581
Dan*_*lan 39
更新:请参阅下面的评论,在大多数情况下,这不是一个好的解决方案.
_.sortBy(data, function(item) {
return [item.sortData.a, item.sortData.b];
});
Run Code Online (Sandbox Code Playgroud)
我没有意识到你被允许从该函数返回一个数组.文档没有提到这一点.
ken*_*iru 20
如果需要指定排序方向,可以使用Lodash 4.x中_.orderBy
的函数数组语法:
_.orderBy(data, [
function (item) { return item.sortData.a; },
function (item) { return item.sortData.b; }
], ["asc", "desc"]);
Run Code Online (Sandbox Code Playgroud)
这将首先按属性进行排序a
,对于具有相同属性值的对象a
,将按属性降序对它们进行排序b
.
它的工作原理是在预期的时间a
和b
性质有不同的类型.
这是使用此语法的jsbin示例.
Tom*_*rda 18
_.sortByAll
在lodash版本3中有一个方法:
https://github.com/lodash/lodash/blob/3.10.1/doc/README.md#_sortbyallcollection-iteratees
Lodash版本4,它已统一:
https://lodash.com/docs#sortBy
其他选择是自己对值进行排序:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
function compareValues(v1, v2) {
return (v1 > v2)
? 1
: (v1 < v2 ? -1 : 0);
};
var data = [
{ a: 2, b: 1 },
{ a: 2, b: 2 },
{ a: 1, b: 3 }
];
data.sort(function (x, y) {
var result = compareValues(x.a, y.a);
return result === 0
? compareValues(x.b, y.b)
: result;
});
// data after sort:
// [
// { a: 1, b: 3 },
// { a: 2, b: 1 },
// { a: 2, b: 2 }
// ];
Run Code Online (Sandbox Code Playgroud)
Kim*_*Kha 12
令人敬畏的简单方法是:
_.sortBy(data, [function(item) {
return item.sortData.a;
}, function(item) {
return item.sortData.b;
}]);
Run Code Online (Sandbox Code Playgroud)
我发现它从检查lodash的源代码,它总是逐个检查功能.
希望有所帮助.
使用ES6简单的语法和lodash
sortBy(item.sortData, (item) => (-item.a), (item) => (-item.b))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55490 次 |
最近记录: |