代码改变世界

javascript对象值排序

2015-09-16 19:51  现代人  阅读(877)  评论(0编辑  收藏  举报

今天同事需要做一个将对象的值从大到小的顺序排序,以下是实现的过程,实现思路是:

比如有对象

var obj = {

    key1:1,

            key2:6,

    key3:55,

    key4:987,

    key8:547,

    key12:12

}

 

要实现的效果是:

var obj = {

    key4:987,

    key8:547,

    key3:55,

       key12:12,

    key2:6,

       key1:1

}

 

 

我的思路是:先将值取出来放到一个数组,然后将这个数组从大到小排序,再将之前的对象的key值取出来,放到另外的一个数组,然后对从大到小排好序的数组遍历,同时在这个遍历里面再遍历这个存放key值的数组,并且取的是以最原始的对象来对比,发现相等那么就存到新的对象里,结果就出来了,这个还需要完善,没有做从小到大,后期扩展一下,以下是具体代码实现:

 

var obj = {
key1: 1,
key2: 254,
key3: 875,
key4: 987,
key5: 123
}


function objSort(obj) {

var arr = [];

for (var i in obj) {
arr.push(obj[i])
}

function SrotArry(arrs) {
var len2 = arrs.length;
var temp2 = null;
for (var e = 0; e < len2 - 1; e++) {
for (var f = 0; f < len2 - 1 - e; f++) {
if (arrs[f] < arrs[f + 1]) {
var temp2 = arrs[f + 1];
arrs[f + 1] = arrs[f];
arrs[f] = temp2;
}
}
}
return arrs;
}


var bigArr = SrotArry(arr);
var keyArr = [];
for (var L in obj) {
keyArr.push(L)
}

var newObj = {};


for (var h = 0; h <= bigArr.length; h++) {
for (var r = 0; r <= keyArr.length; r++) {
if (bigArr[h] == obj[keyArr[r]]) {
newObj["" + keyArr[r] + ""] = bigArr[h];
break;
}
}
}


return newObj;


}

console.log(objSort(obj))

// 今天在群里面有人讨论sort方法,然后想到了对于对象排序是否有更好的方法,然后想到了一种新的方法,支持从大到小,和从小到大,当里面的值是相等的时候也会正常排序,

var obj = {
    key1:1,
       key2:6,
       key88:1,
       key99:547,
    key3:55,
    key4:987,
    key8:547,
    key12:12
};
 
/*
*  obj 是要处理的对象
*  bigMinFlag 是表示从大到小排序,还是从小到大排序, 当bigMinFlag 参数为true的时候 结果是从小到大,当bigMinFlag为flase时,结果时从大到小
*/ 

function objSort(obj, bigMinFlag){
    var arr = [];
    for(var x in obj){
       var tmp = {};
       tmp[x] = obj[x];
       arr.push(Object.assign(tmp,{__age:obj[x]}))
    };
    function compare(property){
        return function(a,b){
            var value1 = a[property];
            var value2 = b[property];
            if(bigMinFlag){
               return value1 - value2
            }else{
               return value2 - value1
             }
              
        }
    };
    arr.sort(compare('__age')).map((item) =>{
       delete item['__age'];
    });
    return arr;
};
 
console.log(objSort(obj, false));
console.log(objSort(obj, true));