鍍金池/ 問答/HTML5  HTML/ js寫了個按屬性排序的方法,運行的結(jié)果沒排序?

js寫了個按屬性排序的方法,運行的結(jié)果沒排序?

試了下這個是好使的:

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

可以把數(shù)組從小到大排序

     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);
那這個為啥不能按屬性的大小排吶。。。看不出啥問題
回答
編輯回答
女流氓

代碼寫得有點長,我簡化了一下,加了個排序參數(shù)

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);
2018年4月2日 08:20
編輯回答
尛憇藌

你的if里面是 value1<value2 然后else if 里面 是 value2>value1 這兩個是一樣的意思 所以你的有問題

2018年3月20日 18:11
編輯回答
吢涼

你確定?你的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')));

你試一試,沒問題的

2017年11月16日 18:13
編輯回答
喜歡你

你這個代碼問題太多了。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
});

//根據(jù) age 排序
console.log(data);
2018年1月21日 23:15
編輯回答
陌如玉

好好看看,你代碼,這么明顯的問題!判斷都不對

2017年10月18日 00:39