Javascript 如何忽略lodash orderBy中的新行

Javascript 如何忽略lodash orderBy中的新行,javascript,node.js,lodash,Javascript,Node.js,Lodash,我正在使用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

我正在使用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' }];
[编辑:事实上,我需要按更多字段进行排序,因此实际排序看起来更像下面的代码]

 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']);

编辑:修改了我的答案-确实可以使用
orderBy

是的,您可以通过提供用于比较的函数来实现这一点

const shouldBeFirst='我的消息\r\n\r\n应该由文本组成';
const shouldbessecond='我的消息\r\n\r\n应该由\r\n\r\n一些文本组成';
常量数组=[
{文本:'xxx'},
{text:shouldBeFirst},
{text:'yyy'},
{text:shouldbessecond},
{文本:'zzz'}];
const ordered=u.orderBy(数组,item=>item.text.replace(/\s+/g,”);
console.log(已订购)

编辑:修改了我的答案-确实可以使用
orderBy

是的,您可以通过提供用于比较的函数来实现这一点

const shouldBeFirst='我的消息\r\n\r\n应该由文本组成';
const shouldbessecond='我的消息\r\n\r\n应该由\r\n\r\n一些文本组成';
常量数组=[
{文本:'xxx'},
{text:shouldBeFirst},
{text:'yyy'},
{text:shouldbessecond},
{文本:'zzz'}];
const ordered=u.orderBy(数组,item=>item.text.replace(/\s+/g,”);
console.log(已订购)

改用
\uu.sortBy
。您可以在订购之前映射这些值:

const ordered = _.sortBy(array, arrayItem => arrayItem.text.replace(/\W+/g, " "));
/\W+/g
是一个正则表达式,它在比较数组项之前从数组项中删除所有非字母数字字符

如果要按多个值排序,请执行以下操作:

const ordered = _(array).chain()
                        .sortBy(arrayItem => arrayItem.day)
                        .sortBy(arrayItem => arrayItem.hour)
                        .sortBy(arrayItem => arrayItem.text.replace(/\W+/g, " "))
                        .value();

但是,这将按字母顺序对工作日进行排序,而不是按一周中的顺序进行排序-您始终可以使用
时刻
库获取工作日的索引并返回该索引。

请改用
.sortBy
。您可以在订购之前映射这些值:

const ordered = _.sortBy(array, arrayItem => arrayItem.text.replace(/\W+/g, " "));
/\W+/g
是一个正则表达式,它在比较数组项之前从数组项中删除所有非字母数字字符

如果要按多个值排序,请执行以下操作:

const ordered = _(array).chain()
                        .sortBy(arrayItem => arrayItem.day)
                        .sortBy(arrayItem => arrayItem.hour)
                        .sortBy(arrayItem => arrayItem.text.replace(/\W+/g, " "))
                        .value();

但是,这将按字母顺序而不是按一周中的顺序对工作日进行排序-您始终可以使用
库获取工作日的索引并返回该索引。

这是
排序方式(数组,'text')
?您想要什么,忽略新行或将其冒泡到排序的顶部?忽略新行这是
orderBy(数组,'text')
?您想要什么,忽略新行或将其冒泡到排序的顶部?忽略新行我想要在许多不同的字段上排序(我修改了问题以反映这一点)。sortBy还能用吗?@rozza是的,检查我修改的答案multiple
。sortBy
s每次都会替换订单。因此,如果您想按排序,比如说,
lastName
后跟
firstName
,您将得到不同的结果。多标准单排序将稳定地产生
Fred Bloggs->Zoe Bloggs->Alice Cooper
,而连续排序将产生
Alice Cooper->Fred Bloggs->Zoe Bloggs
,即使如此,最后两个也可以互换,这取决于所采用的排序算法。@vlaz不完全正确;这是一种稳定的分拣,意味着当两个物品相等时,分拣机将按照找到它们的相同顺序将它们分开。所以,你必须从最不重要的领域开始,然后走向更重要的领域。我的例子假设最重要的是文本属性。@André-JacquesdeBeer表示歉意。我查看了一下,发现lodash实现了自己的排序。我的假设是,它委托给-规范允许它不被委托,事实上,跨引擎的不同实现可能会交换“相等”的值,因此包含
Fred Bloggs->Zoe Bloggs
的输入,如果按姓氏排序,最后可能会出现
Zoe Bloggs->Fred Bloggs
。我想对一些不同的字段进行排序(我已经修改了这个问题以反映这一点)。sortBy还能用吗?@rozza是的,检查我修改的答案multiple
。sortBy
s每次都会替换订单。因此,如果您想按排序,比如说,
lastName
后跟
firstName
,您将得到不同的结果。多标准单排序将稳定地产生
Fred Bloggs->Zoe Bloggs->Alice Cooper
,而连续排序将产生
Alice Cooper->Fred Bloggs->Zoe Bloggs
,即使如此,最后两个也可以互换,这取决于所采用的排序算法。@vlaz不完全正确;这是一种稳定的分拣,意味着当两个物品相等时,分拣机将按照找到它们的相同顺序将它们分开。所以,你必须从最不重要的领域开始,然后走向更重要的领域。我的例子假设最重要的是文本属性。@André-JacquesdeBeer表示歉意。我查看了一下,发现lodash实现了自己的排序。我的假设是,它被委托给-规范允许它不被委托,事实上,不同的引擎实现可能会交换“相等”的值,因此包含
Fred Bloggs->Zoe Bloggs
的输入,如果按姓氏排序,可能会以
Zoe Bloggs->Fred Bloggs
结束。