JavaScript 對象數組,根據某個對象屬性進行排序

每個函數都是 Function 對象的實例,函數名是一個指向函數對象的指針。

所以可以從一個函數中返回另一個函數。

sort() 方法的參數是一個比較函數,接收兩個參數,即比較的值。

function createComparisonFunction(propertyName) {
                                                        // 爲什麼要在內部添加一個函數,而不是直接進行操作?
    return function(object1, object2){                  // object1 和 object2 是怎麼取到值的?
        var value1 = object1[propertyName];
        var value2 = object2[propertyName];
        
        if (value1 < value2){
            return -1;
        } else if (value1 > value2){
            return 1;
        } else {
            return 0;
        }
    };
}

var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}];
        
data.sort(createComparisonFunction("name"));
alert(data[0].name);          //Nicholas
        
data.sort(createComparisonFunction("age"));
alert(data[0].name);          //Zachary  
兩個疑問:

1、object1 和 object2 是怎麼取到值的?

數組的sort() 方法接收一個比較函數作爲參數,該函數有兩個參數,分別爲待比較的兩個值,即object1 和 object2

2、爲什麼要在內部添加一個函數,而不是直接進行操作?

這裏的 createComparisonFunction() 函數需要一個參數來指定比較排序的依據,不能直接作爲sort() 需要的比較參數。所以返回一個符合sort() 要求的函數。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章