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));