使用lodash按值(整数)对数组进行排序

58

我真的很苦恼,但我找不到解决办法。

我有一个数组,并且我想按值(所有整数)对其进行排序。我想,好吧,让我们使用lodash,肯定有一个方便的函数可以做到这一点。

然而我无法弄清楚如何做到这一点。

到目前为止,我得到了这个:

myArray = [3, 4, 2, 9, 4, 2]

如果我使用这段代码,我会得到一个结果:

myArray = _(myArray).sort();

但不幸的是,排序后返回值似乎不再是一个数组。在排序后,myArray.length变成了未定义。

我发现了数千个lodash按键排序数组的示例。 https://lodash.com/docs#sortBy

有人可以告诉我如何将以下返回结果作为数组获取吗?

[2, 2, 3, 4, 4, 9]

不可能这么难,但不知道为什么我做不到...

有时候我觉得lodash文档有点复杂。我可能只是缺少一个重要的细节...


没有 Lodash,你可以直接运行 myArray = myArray.sort() - Pete
@Pete,实际上使用myArray.sort()对于数字来说是行不通的,因为这个JavaScript函数会将数字排序,就好像它们是字符串一样。所以[3, 1, 2, 11234]会被排序成[1, 11234, 2, 3]。你必须进行一些愚蠢的转换才能让JS将其作为数字进行排序。如果可以的话,我建议使用Lodash的_.sortBy()。参见此处 - FireDragon
1
@FireDragon 我看到你没有侮辱任何人。但是请注意你的语言,谨慎使用。 - Yunnosch
2个回答

94

您可以在这里使用sortBy()函数。您不需要指定键,因为它会回退到identity()

var myArray = [ 3, 4, 2, 9, 4, 2 ];

_.sortBy(myArray);
// → [ 2, 2, 3, 4, 4, 9 ]

_(myArray).sortBy().take(3).value();
// → [ 2, 2, 3 ]

好的,非常感谢。这对我有用。 虽然我不太理解这种符号在lodash文档中没有写明,但是通过使用这段代码,我也得到了结果。myArray = _(myArray).sort().value(); - Merc
1
Lodash 将数组方法添加到包装器中,并在文档这里提到。 - Adam Boduch

0

选定的答案是正确的,但我们也可以使用sort()完成该任务

const _ = require('lodash');
const myArray = [1,2,3,4,"A1","A10","A11","A12","A2","A3","A4","AZ","A5","B10", "B2", "F1", "F12", "F3",1,5,6,7,0,"a","b","a1"];

const sortFilter = _(myArray).sort().value();
console.log(sortFilter)

const sortByFilter = _(myArray).sortBy().value();
console.log(sortByFilter)

2
在链式方法中使用 .sort() 显然是使用底层的 Array sort,在排序之前将值字符串化。这会产生一些令人惊讶的结果,例如 _([1, 2, 10]).sort().value() 返回 [ 1, 10, 2 ]。 - leedm777

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接