【问题标题】:Javascript sort method handling null values处理空值的Javascript排序方法
【发布时间】:2013-11-15 19:24:12
【问题描述】:

我有一个对象列表,我想根据我知道可以使用排序方法的字段对对象进行排序。当比较字段有空值时,排序不会发生,如何解决这个问题?

http://jsfiddle.net/mailtoshebin/kv8hp/

var arrOfObj = [
    {
        "Name": "Zak",
        "Age": 25
    },
    {
        "Name": "Adel",
        "Age": 38
    },
    {
        "Name": null,
        "Age": 38
    },
    {
        "Name": "Yori",
        "Age": 28
    }
];

sortArrOfObjectsByParam(arrOfObj, "Name");
alert("ASCENDING: " + arrOfObj[0].Name + ", " + arrOfObj[1].Name + ", " + arrOfObj[2].Name);

function sortArrOfObjectsByParam(arrToSort , strObjParamToSortBy  ) {
    if(sortAscending == undefined) sortAscending = true;  // default to true

    if(sortAscending) {
        arrToSort.sort(function (a, b) {

            return a[strObjParamToSortBy] > b[strObjParamToSortBy];
        });
    }
    else {
        arrToSort.sort(function (a, b) {
            return a[strObjParamToSortBy] < b[strObjParamToSortBy];
        });
    }
}

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以在 comp func 中处理 null 值:

        arrToSort.sort(function (a, b) {
             if (a[strObjParamToSortBy]==null) return 1
             if (b[strObjParamToSortBy]==null) return 0
            return a[strObjParamToSortBy] > b[strObjParamToSortBy];
        });
    

    【讨论】:

    • 我可以在排序列表的末尾获取具有空值的对象吗?谢谢。
    • 设置第一个条件为if(a[strObjParamToSortBy] == null) return -1; jsfiddle.net/kv8hp/2
    • 很抱歉,结果中没有显示多个空对象,只有一个对象出现jsfiddle.net/mailtoshebin/kv8hp/3
    • jsfiddle.net/nQkBj 工作正常,但结果中只显示一个空对象
    • 也许我误解了你的问题......我更新了小提琴以包含两个空值。我还更改了警报以包含数组中的所有元素。两个空值都出现在末尾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    相关资源
    最近更新 更多