【问题标题】:Sort array with lodash by value (integer)使用 lodash 按值(整数)对数组进行排序
【发布时间】:2015-05-10 22:03:18
【问题描述】:

我真的在这方面苦苦挣扎,但我找不到解决方案。

我有一个数组,我想按值(所有整数)对其进行排序。 我想,好吧,让我们使用 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 实际使用myArray.sort() 对数字起作用,因为这个javascript 函数实际上对数字进行排序,就好像它们是字符串。所以 [3, 1, 2, 11234] 将被排序为 [1, 11234, 2, 3]。您必须进行一些愚蠢的转换才能使 JS 将其排序为数字。如果可以,我建议使用 Lodash 的 _.sortBy()。见参考here
  • @FireDragon 我看你不是在侮辱一个人。但是请注意您的语言。

标签: arrays sorting return lodash


【解决方案1】:

您可以在此处使用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();
  • Lodash 将数组方法添加到包装器中,文档中提到了 here
【解决方案2】:

选择的答案是正确的,但我们也可以使用 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)

【讨论】:

  • 在链方法上使用 .sort() 显然是在使用底层数组排序,它在排序之前对值进行字符串化。这给出了一些令人惊讶的结果,例如 _([1, 2, 10]).sort().value() 返回 [ 1, 10, 2 ]。
猜你喜欢
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多