【发布时间】:2017-01-18 15:39:45
【问题描述】:
我有一个这样的 Javascript 数组:
var list = [{Name: 'X', Value: 140.000},
{Name: 'Y', Value: 200.000},
{Name: 'Z', Value: 50.000}]
(它还有更多属性,但为简洁起见省略了)。
我创建了一个函数,该函数使用传递给函数的属性名称对该列表进行排序。我已经用 lodash 轻松完成了这项工作,但是如果我对 Value 进行排序,则这些值似乎被视为字符串并且排序错误。
这是我的排序功能(到目前为止)
function sortByField(fieldName)
{
list = _.sortBy(list, fieldName);
//afterwards I call reverse() if the sortDirection is descending, but I omitted this part for brevity
}
对 Value 排序后,我得到以下数组:
var list = [{Name: 'X', Value: 140.000},
{Name: 'Y', Value: 200.000},
{Name: 'Z', Value: 50.000}]
您可以看到它将值视为字符串,即使它们是十进制数。 'Z' 对象应该是第一个。我该如何解决这个问题?
我一直在搜索 lodash 文档,但似乎找不到与此问题相关的任何内容。请问有什么帮助吗?将不胜感激。
编辑:我刚刚意识到 Value-property 是通过网页(输入控件)填充的,因此 Javascript 实际上将它作为字符串添加到数组中,这可能会导致问题。我可以以某种方式将其转换为浮点数吗?还是我必须求助于 Javascript 的内置排序功能并创建自己的比较?
【问题讨论】:
-
只需使用普通的内置 JavaScript
.sort()和回调即可返回两个“值”属性之间的差异。 -
为什么是小数点后的位置?
-
哦,这是千位分隔符,而不是示例中的小数点。在我国,“。”是千位分隔符 :-)
-
但是你需要一个数字或一个字符串并按自定义字符串值排序是错误的。
标签: javascript sorting lodash