admin管理员组文章数量:1332890
I am using underscore to sort an array. Is there a way to make nulls always last whether ascending or descending? For example:
[
{ name: 'a', age: 1 },
{ name: 'z', age: 5 },
{ name: '', age: 1 },
{ name: 'v', age: 7 }
]
Will produce
[
{ name: 'a', age: 1 },
{ name: 'v', age: 7 },
{ name: 'z', age: 5 },
{ name: '', age: 1 }
]
and descending will produce:
[
{ name: 'z', age: 5 },
{ name: 'v', age: 7 },
{ name: 'a', age: 1 },
{ name: '', age: 1 }
]
My real array is an array of objects so i have to pluck values out.
I am using underscore to sort an array. Is there a way to make nulls always last whether ascending or descending? For example:
[
{ name: 'a', age: 1 },
{ name: 'z', age: 5 },
{ name: '', age: 1 },
{ name: 'v', age: 7 }
]
Will produce
[
{ name: 'a', age: 1 },
{ name: 'v', age: 7 },
{ name: 'z', age: 5 },
{ name: '', age: 1 }
]
and descending will produce:
[
{ name: 'z', age: 5 },
{ name: 'v', age: 7 },
{ name: 'a', age: 1 },
{ name: '', age: 1 }
]
My real array is an array of objects so i have to pluck values out.
Share Improve this question edited Nov 24, 2014 at 8:21 Evgeniy 2,9213 gold badges22 silver badges35 bronze badges asked Nov 23, 2014 at 20:15 Luke101Luke101 65.3k88 gold badges241 silver badges374 bronze badges 11- You can remove all the null values, why put them on the end? – Bazinga Commented Nov 23, 2014 at 20:18
- I am trying to sort a property on an object. So even if a property is null the other properties are useful. – Luke101 Commented Nov 23, 2014 at 20:22
- You can make a plunker so i can try to help you? – Bazinga Commented Nov 23, 2014 at 20:24
- Why do you need to do this? – istos Commented Nov 23, 2014 at 20:25
- I am trying to mimick a database "order by Name NULLS LAST" – Luke101 Commented Nov 23, 2014 at 20:27
3 Answers
Reset to default 6There are many ways to go about it but you could try something like this:
var arr = [{name: 'a', age: 1}, {name: 'z', age: 5}, {name: '', age: 1}, {name: 'v', age: 7 }];
_.chain(arr)
.sortBy('name')
//.reverse() // to sort descending
.partition('name')
.flatten()
.value();
Result:
[ { name: 'a', age: 1 },
{ name: 'v', age: 7 },
{ name: 'z', age: 5 },
{ name: '', age: 1 } ]
You could simply find them after sorting and put them in the back manually. Maybe by splitting the different values in 2 arrays and then concatenating them. One of the arrays contains non null values
and the other the null values
You can do this with lodash, and im think underscore as this function too.
var users =[{name: 'a', age: 1}, {name: '', age: 4}, {name: 'z', age: 5}, {name: '', age: 1}, {name: 'v', age: 7 }];
_.sortBy(users, 'name');
The results will give you the null names in the beginning:
[{name: '', age: 1}, {name: '', age: 4}, {name: 'a', age: 1}, {name: 'z', age: 5}, {name: 'v', age: 7 }];
本文标签: javascriptMake nulls always last when sortingStack Overflow
版权声明:本文标题:javascript - Make nulls always last when sorting - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742319595a2452512.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论