将这两个函数中重复的部分封装成一个函数?

//给数组中的每一项增加3

function addThreeForEachItem(array){

      for(var i = 0; i < array.length; i++){

        array[i] = array[i] + 3;

    }

    return array;

}

//将数组中的每一项编码

function encodeEachItem(array){

    for(var i = 0; i < array.length; i++){

        array[i] = encodeURIComponent(array[i]);

    }

    return array;

}

两个函数非常相似(重复),如何将这两个函数中重复的部分封装成一个函数?

阅读 3.1k
4 个回答
可以考虑给第二个参数来区分
function repeatControl(array,param){
 for(var i = 0; i < array.length; i++){
    if(param=='addThree'){
       array[i] + = 3;
    }else{
       array[i] = encodeURIComponent(array[i]);
    }
 }
  return array;
}

原生的方法就有 不用封装

array.map(item=>item+3)
array.map(item=>encodeURIComponent(item))

JS自带的map方法已经封装了你的需求

新手上路,请多包涵
function sameCode(fn,arr){
    let temp = []
    for(let i = 0;i < arr.length;i++){
        let result = fn.call(null,arr[i]);
        temp.push(result);
    }
    return temp;
}

抽出来之后:

//给数组中的每一项增加3

function addThreeForEachItem(array){
    return sameCode(function(i){return i+3},array);
}

//将数组中的每一项编码

function encodeEachItem(array){
    return sameCode(encodeURIComponent(),array);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题