亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數寫完,發現沒有起作用,debug了好久,最后還是決定求助imooc的各位了!

函數寫完,發現沒有起作用,debug了好久,最后還是決定求助imooc的各位了!

茅侃侃 2023-05-01 14:10:43
看完《javascript語言精粹》中的array.sort(comparefn)一節(Page81),很有啟發性,于是自己試著實現這樣一個通用函數by:無論數組對象為何種類型,調用此函數就能實現人們一般認知意義上的排序。 var by = function (name,minor){ return function (a,b){ var objBy =  function (a,b){ var aValue,bValue; aValue = a[name]; bValue = b[name]; if (aValue === bValue){ return typeof minor === 'function' ? minor(a,b) : 0; } if (typeof aValue === typeof bValue){ return aValue < bValue ? -1 : 1; } return typeof aValue < typeof bValue ? -1 : 1; } var generalBy  = function (a,b){ if (a === b){ return 0; } if (typeof a === 'string' && typeof b === 'string'){ return a.localeCompare(b); } if (typeof a === typeof b){ return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; } if (a && b && typeof a ==='object' && typeof b === 'object'){ return objBy; } return generalBy; } }         //test var arry1 = [8,90,10,2,100,34,35,12]; var arry2 = [4,20,10,34,"hello word","殺星","my god","哈哈哈","高級編程","愛情","四貨","一個人" ,"大人"]; var arry3 = [{name:"maggie",sex:"famale",age:43},{name:"gino",sex:"male",age:28},{name:"laura",sex:"famale",age:20},{name:"tino",sex:"male",age:25},{name:"amy",sex:"famale",age:27}]; console.log(arry1.sort(by())); console.log(arry2.sort(by())); console.log(arry3.sort(by('sex',by('age'))));
查看完整描述

1 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

這里的by應該返回的是一個比較函數,你這里返回的是一個“返回比較函數”的函數,所以應該改為(注意最后的改動):

var by = function (name, minor) {    return function (a, b) {        var objBy = function (a, b) {            var aValue, bValue;
            aValue = a[name];
            bValue = b[name];            if (aValue === bValue) {                return typeof minor === 'function' ? minor(a, b) : 0;
            }            if (typeof aValue === typeof bValue) {                return aValue < bValue ? -1 : 1;
            }            return typeof aValue < typeof bValue ? -1 : 1;
        }        var generalBy = function (a, b) {            if (a === b) {                return 0;
            }            if (typeof a === 'string' && typeof b === 'string') {                return a.localeCompare(b);
            }            if (typeof a === typeof b) {                return a < b ? -1 : 1;
            }            return typeof a < typeof b ? -1 : 1;
        }        if (a && b && typeof a === 'object' && typeof b === 'object') {            return objBy(a,b);
        }        return generalBy(a,b);
    }
}
查看完整回答
反對 回復 2023-05-03
  • 1 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號