js写了个按属性排序的方法,运行的结果没排序?

试了下这个是好使的:

arr.sort(function(a,b){return a-b}) 

可以把数组从小到大排序

     var data=[
            {name:"hhhh",age:17,else:200},
            {name:"ssss",age:18,else:100}
        ]

     function compareSth(name){
        return function(obj1,obj2){
            var  value1 = obj1[name];
            var  value2 = obj2[name];
            if(value1 < value2){
                return -1;
            }else if(value2 > value1){
                return 1;
            }else{
                return 0;
            }
        }
     }
     data.sort(compareSth("age"));
     console.log(data);
    data.sort(compareSth("else"));
     console.log(data);
     data.sort(compareSth("name"));
     console.log(data);
那这个为啥不能按属性的大小排呐。。。看不出啥问题
阅读 3.8k
5 个回答

你确定?你的if 和else if的条件不是相同的吗

var data=[
    {name:'iiii',age:20,else:300},
    {name:"hhhh",age:17,else:200},
    {name:"ssss",age:18,else:100}
    ]

    function compareSth(name){
        return function(obj1,obj2){
            var  value1 = obj1[name];
            var  value2 = obj2[name];
            if(value1 < value2){
                return -1;
            }else if(value1 > value2){
                return 1;
            }else{
                return 0;
            }
        }
    }
    console.log(data.sort(compareSth('age')));

你试一试,没问题的

代码写得有点长,我简化了一下,加了个排序参数

var data=[
        {name:"hhhh",age:17,else:200},
        {name:"ssss",age:18,else:100}
    ]

 function compareSth(name, type){
    return function(a, b) { 
        var flag = type === "desc" ? -1 : 1; 
        return flag * (a[name] - b[name]);
    }
 }
 data.sort(compareSth("age", "desc"));
 console.log(data);

你的if里面是 value1<value2 然后else if 里面 是 value2>value1 这两个是一样的意思 所以你的有问题

你这个代码问题太多了。data给谁用?比较的是谁的name?作为程序,它是不知道的。

var data = [
    {name:"hhhh",age:17,else:200},
    {name:"ssss",age:18,else:100},
    {name:"ssss",age:14,else:100},
    {name:"ssss",age:19,else:100},
    {name:"ssss",age:15,else:100},
    {name:"ssss",age:16,else:100}
];

data.sort(function (a, b) {
    return a.age - b.age
});

//根据 age 排序
console.log(data);

好好看看,你代码,这么明显的问题!判断都不对

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题