当数组中有太多对象时,ES6中的sort()以错误的方式对项进行排序

时间:2018-06-03 04:56:08

标签: sorting ecmascript-6

这是一个包含8个对象的示例数组。现在,我想按升序对它们进行排序。我在控制台中完美地得到了结果。

const array = 
            [{"lead_location":"a"},{"lead_location":"rta"},
             {"lead_location":"van"},{"lead_location":"svan"},
             {"lead_location":"avan"},{"lead_location":"yvan"}, 
             {"lead_location":"ab"},{"lead_location":"rta"}];

var sort = array.sort((a, b) => (a.lead_location) > (b.lead_location));
console.log(sort); // this array is sorted perfectly

但是,如果我在数组中添加更多对象(在下一个示例中为13),则数组排序不好。我使用与上面相同的排序方法。第二个数组如下所示:

const array = 
            [{"lead_location":"a"},{"lead_location":"rta"},
             {"lead_location":"van"},{"lead_location":"svan"}, 
             {"lead_location":"avan"},{"lead_location":"yvan"}, 
             {"lead_location":"a"},{"lead_location":"rta"},
             {"lead_location":"van"},{"lead_location":"svan"}, 
             {"lead_location":"avan"},{"lead_location":"ab"}, 
             {"lead_location":"rta"}];

    var sort = array.sort((a, b) => (a.lead_location) > (b.lead_location));
    console.log(sort); // this array is not sorted well

我很困惑,怎么改变数组的大小会显示不同的结果?任何人都可以发现我的错误?

1 个答案:

答案 0 :(得分:4)

let sort = array.sort((a,b) => {
    if(a.lead_location > b.lead_location) return 1;
    if(a.lead_location < b.lead_location) return -1;
    return 0
})

您无法为结果返回true / false。您必须指定订单。这应该是升序。如果不交换-1和1. 0表示两者相等。