日期:2014-05-16  浏览次数:20361 次

6道有趣的JS基础题解答(完)

http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html


1.找出数字数组中最大的元素(使用Math.max函数)
2.转化一个数字数组为function数组(每个function都弹出相应的数字)
3.给object数组进行排序(排序条件是每个元素对象的属性个数)
4.利用JavaScript打印出Fibonacci数(不使用全局变量)
5.实现如下语法的功能:var a = (5).plus(3).minus(6); //2
6.实现如下语法的功能:var a = add(2)(3)(4); //9

<script>
// 1.求数组最大值
function getMax(arr) {
    if(arr.length === 1) {
        return arr[0];
    } else if(arr.length === 2) {
        return Math.max(arr[0], arr[1]);
    }

    var subArr = arr.slice(1, arr.length);
    var second = arguments.callee(subArr);
    return Math.max(arr[0], second);
}

// 另类解法
function getMax2(arr) {
    return Math.max.apply(null, arr);
}

console.log(getMax([1,2,3,3 ,3 ,2 , 5, 8, 898]));

// 2.转化一个数字数组为function数组
function convert(array) {
    var temp = [];
    for(var i = 0, len = array.length; i < len; i++) {
        temp[i] = (function(num) {
            return function() {
                alert(num);
            }
        })(array[i]);
    }
    return temp;
}
var fArray = convert([1,2,3,4,555]);
fArray[4]();

// 3.给object数组进行排序
function sortObj(array) {
    var temp = [], key, objLen = 0;
    for(var i = 0, len = array.length; i < len; i++) {
        for(key in array[i]) {
            objLen ++;
        }
        array[i]['HWSLObjLen'] = objLen;
        objLen = 0;
    }
    
    array.sort(function(a,b) {
        if(a['HWSLObjLen'] > b['HWSLObjLen']) {
            return 1;
        } else if(a['HWSLObjLen'] < b['HWSLObjLen']) {
            return -1
        } else {
            return 0;
        }
    }); 

    //console.log(array);
}
sortObj([{'a':1,'b':2}, {'a':1,'b':2, 'c':3, 'd':4}, {'a':1,'b':2, 'c':3}, {'a':1,'b':2, 'c':100}]);

// 4.利用JavaScript打印出Fibonacci数
function fibo(n) {
    if(n === 1 || n === 2) {
        return 1;
    }

    return arguments.callee(n-1) + arguments.callee(n-2);
}

//console.log(fibo(5));

// 5.实现如下语法的功能:var a = (5).plus(3).minus(6); //2
Number.prototype.plus=function(a){
    return this+a;
}
Number.prototype.minus=function(a){
    return this-a;
}
 
console.log((5).plus(3).minus(6));  //2

// 6.实现如下语法的功能:var a = add(2)(3)(4); //9 @Gray Zhang
function add(x) {
    var result = x;
    var fn = function(x) {
    result += x;
        return fn;
    };
    fn.toString = fn.valueOf = function() { return result; };
    return