1. 程式人生 > >把物件按照屬性名的字母順序進行排列

把物件按照屬性名的字母順序進行排列

//要排序的物件
var obj = {name: "zhangsan", age: 8, ace: 5, nbme: "lisi"}; 
//排序的函式
function objKeySort(obj) {
  //先用Object內建類的keys方法獲取要排序物件的屬性名,再利用Array原型上的sort方法對獲取的屬性名進行排序,newkey是一個數組
    var newkey = Object.keys(obj).sort();
    var newObj = {};//建立一個新的物件,用於存放排好序的鍵值對
    for (var i = 0; i < newkey.length; i++) {//遍歷newkey陣列
        newObj[newkey[i]] = obj[newkey[i]];//向新建立的物件中按照排好的順序依次增加鍵值對
    }
    return newObj;//返回排好序的新物件
}

Object.keys 返回一個所有元素為字串的陣列,其元素來自於從給定的物件上面可直接列舉的屬性。這些屬性的順序與手動遍歷該物件屬性時的一致。


var arr = ["a", "b", "c"];
alert(Object.keys(arr)); 
// 彈出"0,1,2"
 
// 類陣列物件
var obj = { 0 : "a", 1 : "b", 2 : "c"};
alert(Object.keys(obj)); 
// 彈出"0,1,2"
 
// getFoo是個不可列舉的屬性
var my_obj = Object.create({}, { getFoo : { value : function () { return this.foo } } });
my_obj.foo = 1;
 
alert(Object.keys(my_obj));

所有我們可以先用Object內建類的keys方法獲取要排序物件的屬性名,再利用Array原型上的sort方法對獲取的屬性名進行排序,newkey是一個數組

var newkey = Object.keys(obj).sort();

 

如果要倒序排列,只需把newkey這個陣列中的每一項進行顛倒即可,即

var newkey = Object.keys(obj).sort().reverse();

objKeySort(obj) ;  //函式執行
Object {nbme: "lisi", name: "zhangsan", age: 8, ace: 5};// 執行結果