javaScript 关于一系列对象的排序,最终还是把对象压入到数组中利用数组的sort排序比较方便。

//-- 给一组对象排序
//-- 例如有这样的一组值: {name:"abc",value:10},{name:"dbc",value:5},{name:"acc",value:15},{name:"ebc",value:50},{name:"bbc",value:80},{name:"aca",value:60}
//-- 将这组值压入数组。利用数组进行排序。
//-- 利用自定义的函数比较数值
let obj = [{name:"abc",value:10},{name:"dbc",value:5},{name:"acc",value:15},{name:"ebc",value:50},{name:"bbc",value:80},{name:"aca",value:60}];
function compare(a, b){
    //根据数组中某元素中的,某数值进行排序。
    //前减后,是升序
    return a.value - b.value; 
}
function compare1(a,b){
    //根据数组中某元素中的,某字符串进行排序。
    //localeCompare 字符串比较
	return a["name"].localeCompare(b["name"]);											
}
obj.sort(compare);
console.log(obj); console.log("\n");
obj.sort(compare1);
console.log(obj); console.log("\n");
// // 无参sort方法会调用每个数组项的toString()方法,得到字符串,然后再对得到的字符串进行排序,有时候可能得不到我们想要的结果
let obj = [{x: 10},3,0,-1,11,99,0,1,55];
obj.sort();
console.log(obj); //[ -1, 0, 0, 1, 11, 3, 55, 99, { x: 10 } ]
for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
        console.log( obj[key].toString());
    }
}
// // 无参sort方法会调用每个数组项的toString()方法,得到字符串,然后再对得到的字符串进行排序,有时候可能得不到我们想要的结果
let obj = ["10","3","0","-1","11","99","0","1","55"];
obj.sort(compare);
console.log(obj); //[ '-1', '0', '0', '1', '10', '11', '3', '55', '99' ]
function compare(a, b){
    return a.localeCompare(b);
}
// localeCompare 是字符对象的方法,ab都是字符串。
//-- 如果想要对对象的成员进行排序是无意义的。如果你想对对象排序后再使用对象,还不如使用数组。
例子1//能够完成完成排序, 但对象转成数组排序后,再由数组转成对象不能保存key和value的对应关系(即转换后和原对象不一样)。
let obj = {"s":0,N:3,K:0,4:-1,5:11,6:99,7:0,8:1,9:55};
let arr = [];
for (const key in obj) {
    //-- 判断是自身属性,非继承过来的属性。
    if (obj.hasOwnProperty(key)) {
        const element = obj[key];
        console.log("element =  ", element);
        arr.push(element);
    }
}
console.log("\n begin :arr =  ", arr);
//-- 已经正确的进行了排序
arr.sort(function(a,b){return a - b;}) 
console.log("\n end :arr =  ", arr);
//-- end :arr =   [ -1, 0, 0, 0, 1, 3, 11, 55, 99 ]

obj = {};
for (const key in arr) {
    obj[key] = arr[key];
}
console.log("\n end :obj =  ", obj);
//--end :obj =   { '0': -1,
  '1': 0,
  '2': 0,
  '3': 0,
  '4': 1,
  '5': 3,
  '6': 11,
  '7': 55,
  '8': 99 }

例子2//-- 对象还原成数组排序,在还原成对象,此例子能够完成key和value的对应关系,但依然不能完成排序。
//-- 如果想要对对象的成员进行排序是无意义的。如果你想对对象排序后再使用对象,还不如使用数组。
let obj = {"s":0,N:3,K:0,4:-1,5:11,6:99,7:0,8:1,9:55};
let arr = [];
for (const key in obj) {
    const element = obj[key];
    console.log("element =  ", element);
    arr[key] = element;
}
console.log("\n begin :arr =  ", arr); // begin :arr =   [ <4 empty items>, -1, 11, 99, 0, 1, 55, s: 0, N: 3, K: 0 ]
//-- 已经正确的进行了排序
arr.sort(function(a,b){return a - b;}) 
console.log("\n end :arr =  ", arr); // end :arr =   [ -1, 0, 1, 11, 55, 99, <4 empty items>, s: 0, N: 3, K: 0 ]
obj = {};
for (const key in arr) {
    
    obj[key] = arr[key];
    console.log("arr[key]==", arr[key]);
}
console.log("\n end :obj =  ", obj);
// end :obj =   { '0': -1,
// '1': 0,
// '2': 1,
// '3': 11,
// '4': 55,
// '5': 99,
// s: 0,
// N: 3,
// K: 0 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值