我有一个对象数组,我想按“home”字段的值升序排序该数组。该字段始终为数字。所以我尝试了以下代码:
_.sortBy(data.home.en, function(obj){ return obj.home });
当'home'的值小于10时,这种方法效果很好,但由于某些原因,10紧跟在1后面,所以最终的顺序看起来像这样:1,10,11,2,3,4,5,6,7,8,9。为什么会出现这种情况?谢谢...
我有一个对象数组,我想按“home”字段的值升序排序该数组。该字段始终为数字。所以我尝试了以下代码:
_.sortBy(data.home.en, function(obj){ return obj.home });
当'home'的值小于10时,这种方法效果很好,但由于某些原因,10紧跟在1后面,所以最终的顺序看起来像这样:1,10,11,2,3,4,5,6,7,8,9。为什么会出现这种情况?谢谢...
您的obj.home
值是字符串,因此它们被视为字符串进行比较,'1' < '10'
是成立的。如果您希望像数字一样对它们进行排序,则需要将它们转换为数字:
_.sortBy(data.home.en, function(obj){ return +obj.home });
或:_.sortBy(data.home.en, function(obj){ return parseInt(obj.home, 10) });
obj.home*1
,而不使用parseInt就可以完成操作 - ncubica+obj.home
是更常见的快捷方式。 - mu is too short+obj.home
会添加字符串而不是数字,所以例如如果你有10 (int) + "00" (str)
的结果将会是1000
,但是如果你写成10 + ("00"*1)
,结果将会是 10。这正是你期望的结果,对吧? - ncubicareturn +'10'
这样的事情。你也省略了一个+
,把10 + '00'*1
的 "一元加号转换为数字" 版本改为10 + +'00'
(需要注意空格);在这种情况下,我会使用parseInt
来使意图更加清晰。 - mu is too short