一些前端编程题目(一)

题目和解题代码

1、如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1

// 解法一
function indexOf(arr, item){
	return arr.indexOf(item);
}
// 解法二 若不支持indexOf
function indexOf(arr, item) {
            if (Array.prototype.indexOf) { // 判断浏览器是否支持indexOf
                return arr.indexOf(item);
            } else {
                for (var i = 0; i < arr.length; i++) {
                    if (arr[i] === item) {
                        return i;
                    }
                }
            }
            return -1;
        }
        

2、计算给定数组 arr 中所有元素的总和

// 普遍解法
function sum(arr) {
    var num=0;
    for(var i=0;i<arr.length;i++){
        num=num+arr[i];
    }
    return num;
}
// forEach遍历
function sum(arr) {
    var s = 0;
    arr.forEach(function(value, index, arr) {
        s += value;
    }, 0);
  
    return s;
}

3、移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组

// 解法一 push(): 在数组末尾添加元素
function remove(arr,item){
    var newArr = [];
    for(var i=0;i<arr.length;i++){
        if(arr[i] != item){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
// 解法二 
function remove(arr, item) {
    var newArr=[];
    for(var i=0;i<arr.length;i++){
        if(arr[i]!==item){
            newArr[newArr.length]=arr[i];
        }
    }
    return newArr;
}
// 解法三 splice(index,num):index:数组元素的位置,num:删除几位元素
function remove(arr,item){
    var newArr = arr.slice(0);
    for(var i=0;i<newArr.length;i++){
        if(newArr[i] == item){
            newArr.splice(i,1);
            i--;
        }
    }
    return newArr;
}

4、移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回

/*前道题不同之处在于要求给定数组上进行操作*/
// splice()
function removeWithoutCopy(arr, item) {
   for(var i=0;i<arr.length;i++){
       if(arr[i]==item){
           arr.splice(i,1);
           i--;
       }
   }
    return arr;
}

5、在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组

// 解法一 利用concat将item连接到数组arr上,返回新的数组,不会更改现有数组
function append(arr, item) {
   return arr.concat(item);
}
// 解法二 普通的迭代拷贝 push()
function append(arr, item) {
    var newArr=[];
    for(var i=0;i<arr.length;i++){
        newArr.push(arr[i]);
    }
    newArr.push(item);
    return newArr; 
}

6、删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组

// 解法一 pop()
function truncate(arr) {
 var newArr = arr.slice(0);
     newArr.pop();
     return newArr;
 }
// 解法二 slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。
// slice(begin,end) end被删除
function truncate(arr) {
        return arr.slice(0,arr.length-1);
}

7、 封装函数 f,使 f 的 this 指向指定的对象

// 解法一 使用call方法 注意arguments对象的参数形式
function bindThis(f, oTarget) {
	return function(){
		return f.call(oTarget,...arguments)
	}
} 
// 解法二 使用apply方法
function bindThis(f, oTarget) {
	return function(){
		return f.apply(oTarget,arguments)
	}
} 
// 解法三 bind方法 直接绑定this方向
function bindThis(f, oTarget) {
	return f.bind(oTarget)
}
/*考察点:call,apply和bind的作用和区别?
  相同点:1:都能改变this指向
  2:都能传递参数
  3:都能通过方法"."方法名调用
  不同点:1:函数名不同
  参数传递方式不同(注意看第二个)
  改变this指向的时机不同(bind在复制时改变,其他两个在调用时改变)
  参数传递时机不同(注意看第三个) */
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值