undercore _.sortBy 没有正确排序数组对象

undercore _.sortBy not sorting array objects correctly

var Arr = [
             {size: "8"},
             {size: "9"},
             {size: "10"},
             {size: "7"},
             {size: "6"}
          ]

console.log(_.sortBy(Arr, 'size'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>

我在上面创建了一个代码示例,它没有根据我给定的数组正确排序。

您的尺码属性是 String 类型,而不是 Number。在 JS 中,引号中的值("')表示 String 类型。

将它们设为数字,它会正确排序。

var Arr = [
   {size: 8 },
   {size: 9 },
   {size: 10},
   {size: 7 },
   {size: 6 }
]

console.log(_.sortBy(Arr, 'size'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>

您需要将 size 更改为数字:

var Arr = [
             {size: "8"},
             {size: "9"},
             {size: "10"},
             {size: "7"},
             {size: "6"}
          ]

console.log(_.sortBy(Arr, (obj) => parseInt(obj.size)));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>

这是一种字符串未按预期解释为数字的情况。这里有两种使用 unary plus 运算符进行转换的方法,有和没有 _:

var Arr = [
             {size: "8"},
             {size: "9"},
             {size: "10"},
             {size: "7"},
             {size: "6"}
          ]

console.log(Arr.sort((a, b) => +a.size - +b.size));
console.log(_.sortBy(Arr, o => +o.size));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>