前端在线编程题1

目录:
1.查找数组元素位置
2.数组求和
3.移除数组中的元素

1.查找数组元素位置

function indexOf(arr, item) {
  if (Array.prototype.indexOf){//在IE8版本以下(含IE8)都不支持Indexof()方法
      return arr.indexOf(item);
  } else {
      for (var i = 0; i < arr.length; i++){
          if (arr[i] === item){
              return i;
          }
      }
  }     
  return -1;
}

2.数组求和

不考虑算法复杂度,用递归做:

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));
    }
}

常规循环:

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;
    });
}

reduce里面可使用最多四个参数来声明回调函数。
function callbackfn(previousValue, currentValue, currentIndex, array1)

回调参数
-previousValue: 通过上一次调用回调函数获得的值。如果向 reduce 方法提供 initialValue,则在首次调用函数时,previousValue 为 initialValue。
-currentValue: 当前数组元素的值。
-currentIndex: 当前数组元素的数字索引。
-array1: 包含该元素的数组对象。
参考:https://msdn.microsoft.com/library/ff679975(v=vs.94).aspx

forEach遍历:

function sum(arr) {
    var s = 0;
    arr.forEach(function(val, idx, arr) {//这里用map也一样
        s += val;
    }, 0);
    return s;
};

 forEach是ES5中操作数组的一种方法,主要功能是遍历数组。
语法:array1.forEach(callbackfn[, thisArg])

参数定义
array1必选。一个数组对象。
callbackfn必选。最多可以接受三个参数的函数。对于数组中的每个元素,forEach 都会调用 callbackfn 函数一次。
thisArg可选。 callbackfn 函数中的 this 关键字可引用的对象。如果省略 thisArg,则 undefined 将用作 this 值。

回调参数
val: 数组元素的值。
idx: 数组元素的数字索引。
arr: 包含该元素的数组对象。

eval:

function sum(arr) {
    return eval(arr.join("+"));
};

3.移除数组中的元素

题目要求不改变原数组,所以可以声明一个数组a用于保存arr中不同于item的值,最后将a返回。

function remove(arr, item) {
     //声明一个新数组保存结果
     var a = [];
     //循环遍历
     for(var i=0; i < arr.length; i++){
         //如果arr[i]不等于item,就加入数组a
         if(arr[i] != item){
             a.push(arr[i]);
         }
     }
     return a;
 }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值