我正在使用lodash/orderBy命令一个数组。我无法控制数组中返回的内容。当我的数组项中有新行时,它们就不会按照我期望的顺序排列。有什么方法可以忽略新行吗?或者有什么其他方法可以让项目正确排序?
const shouldBeFirst = 'My message\r\n\r\nshould consist of A A A A some
text';
const shouldBeSecond= 'My message\r\n\r\nshould consist of \r\n\r\n some
text';
const array = [
{ text: 'xxx' },
{ text: shouldBeFirst },
{ text: 'yyy' },
{ text: shouldBeSecond},
{ text: 'zzz' }];
const ordered = orderBy(array, ['day'], ['asc']);
我希望这些物品的摆放顺序是
{ text: shouldBeFirst },
{ text: shouldBeSecond},
{ text: 'xxx' },
{ text: 'yyy' },
{ text: 'zzz' }];
但是我把它们放在里面的顺序是:
{ text: shouldBeSecond },
{ text: shouldBeFirst },,
{ text: 'xxx' },
{ text: 'yyy' },
{ text: 'zzz' }];
[edit:实际上我需要按更多的字段排序,所以实际的排序看起来更像下面的代码]
const array = [
{ text: 'xxx', day: 'monday', hour: '12' },
{ text: shouldBeFirst, day: 'tuesday', hour: '12' },
{ text: 'yyy', day: 'wednesday', hour: '12' },
{ text: shouldBeSecond, day: 'thursday', hour: '12'},
{ text: 'zzz', day: 'friday', hour: '12' }];
const ordered = orderBy(array, ['day', 'hour', 'text'], ['asc', 'asc', 'asc']);
2条答案
按热度按时间8iwquhpp1#
实际上可以使用
orderBy
:您可以使用
orderBy
通过提供一个用于比较的函数来实现这一点。如果需要,可以调整替换-这只是为了说明如何定义它。
一个二个一个一个
qfe3c7zg2#
使用
_.sortBy
代替。您可以在排序之前Map值:/\W+/g
是一个正则表达式,它在比较数组项之前从数组项中删除所有非字母数字字符。如果你想按多个值排序:
但是,这将按字母顺序而不是按周中的顺序对工作日进行排序-您可以始终使用
moment
库获取工作日的索引并返回该索引。