js

JS能力测试

Posted by liyaozr on March 24, 2017

面试题来源于牛客网,~

1、题目描述 找出元素 item 在给定数组 arr 中的位置 输出描述: 如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1

输入例子: indexOf([ 1, 2, 3, 4 ], 3) 输出例子: 2

function indexOf(arr, item) {  
    if (Array.prototype.indexOf) {    
        return arr.indexOf(item);  
    } else {    
        for (var i = 0; i < arr.length; i++) {      
            if (arr[i] === item) {        
                return i;      
            }    
        }  
    }     
    return -1;
}

2、数组求和 计算给定数组 arr 中所有元素的总和 输入描述: 数组中的元素均为 Number 类型 输入例子: sum([ 1, 2, 3, 4 ]) 输出例子: 10

    //不考虑算法复杂度, 用递归做:
    function sum(arr) {    
        var len = arr.length;    
        if (len == 0) {        
            return 0;    
        } else if (len == 1) {        
            return arr[0];    
        } else {        
            return arr[0] + sum(arr.slice(1));    
        }
    }
    //常规循环:while或者for
    function sum(arr) {    
        var s = 0;    
        for (var i = arr.length - 1; i >= 0; i--) {        
            s += arr[i];    
        }    
        return s;
    }
    //函数式编程 map 或者 reduce:
    function sum(arr) {    
        return arr.reduce(function(prev, curr, idx, arr) {        
            return prev + curr;    
        });
    }
    
    //forEach遍历:
    function sum(arr) {    
        var s = 0;    
        arr.forEach(function(val, idx, arr) {        
            s += val;    
        }, 0);      
        return s;
    };
    
    eval
    function sum(arr) {    
        return eval(arr.join("+"));
    };

答案来源:O.z.

3、移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 输入例子: remove([1, 2, 3, 4, 2], 2) 输出例子: [1, 3, 4]

    //map
    function remove(arr, item) {
        var result=[];
        arr.map(function (value,index,array) {
            if (value !== item) {
                result.push(value);
            }
        });
        return result;
    }
    //很常规的for循环
    function remove(arr, item) {
        var result=[];
        for (var i = 0; i < arr.length; i++) {
            if(arr[i] !== item){
                result.push(arr[i]);
            }
        }
        return result;
    }
    //看别人还有用filter()的,可以尝试一下。

4、移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 输入例子: removeWithoutCopy([1, 2, 2, 3, 4, 2, 2], 2) 输出例子: [1, 3, 4]

function removeWithoutCopy(arr, item) {
    var result=arr;
    var i = 0;
    while (i<arr.length) {
        if (arr[i] == item) {
            result.splice(i,1);
        }else{
            i++;
        }
    }
    return result;
}
//倒着检测,这样就不用担心length问题
function removeWithoutCopy(arr, item) { 
      for(i=arr.length-1;i>=0;i--) { 
         if(arr[i]==item) { 
              arr.splice(i,1); 
         } 
      } 
      return arr; 
 }
 
 //直接用indexOf
 function removeWithoutCopy(arr, item) {    
    while (arr.indexOf(item) != -1) {        
        arr.splice(arr.indexOf(item), 1);    
    }    
    return arr;
}