Ben*_*ron 11 javascript typescript lodash
我有一个Angular 2打字稿应用程序,它使用lodash进行各种操作.
我有一个对象数组,我使用对象中的属性进行排序...
_.orderBy(this.myArray, ['propertyName'], ['desc']);
Run Code Online (Sandbox Code Playgroud)
这很有效,但我的问题是有时'propertyName'可以有一个空值.这些作为降序列表中的第一项排序,然后是最高实际值.
我想让这些空值以降序排列显示在最后.
我理解为什么空值首先出现.
有谁知道如何处理这个?
Ori*_*ori 15
在_.orderBy()迭代中使用方法而不是字符串,检查值,如果它null返回一个空字符串.
const myArray = [{ propertyName: 'cats' }, { propertyName: null }, { propertyName: 'dogs' }, { propertyName: 'rats' }, { propertyName: null }];
const result = _.orderBy(myArray, ({ propertyName }) => propertyName || '', ['desc']);
console.log(result);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
检查可以很简单,就像我使用的那样,将所有的falsy值转换为空字符串:
propertyName || ''
Run Code Online (Sandbox Code Playgroud)
如果需要更严格的检查,可以使用三元运算符,并只处理null值:
propertyName === null ? '' : propertyName
Run Code Online (Sandbox Code Playgroud)
Ben*_*ron 10
我需要的代码看起来像这样......
_.orderBy(this.myArray, [( o ) => { return o.myProperty || ''}], ['desc']);
Run Code Online (Sandbox Code Playgroud)
只是为了将来给其他人参考,您可以这样做,以在最后使用错误值进行升序排序。
items =>
orderBy(
items,
[
i => !!i.attributeToCheck,
i => {
return i.attributeToCheck ? i.attributeToCheck.toLowerCase() : ''
}
],
['desc', 'asc']
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8871 次 |
| 最近记录: |