牛客网 前端编程题小结

牛客网 前端编程题小结

虽然是最最基础的js题,但是还是收获不少,大家都很聪明啊!


concat()、slice() map()不改变原数组

1.找出元素 item 在给定数组 arr 中的位置 

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


最基础版本:

function indexOf(arr,item){

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

if(arr[i]==item){

return i;

}

}

if (arr[arr.length]!=item) {

return -1;

}


}

foreach版本:


function indexOf(arr,item){

var i=-1;

arr.forEach( function(element, index) {

if (element==item) {

i=index;

}

});

return i;

}

document.write(indexOf([11,22,33,44],2));


indexof()版本:

function indexOf(arr,item){

 return arr.indexOf(item);

}



document.write(indexOf([ 1, 2, 3, 4 ], 3));


2.计算给定数组 arr 中所有元素的总和 数组中的元素均为 Number 类型


foreach版本:

function sum(arr) {

var sum=0;

arr.forEach( function(element) {

sum+=element;


});

return sum;

}

document.write(sum([1,2,3,4,5]));


reduce版本:
function sum(arr) {

return arr.reduce(function  (prev,cur) {

return prev+cur;

})


}

document.write(sum([1,2,3,4,5]));


evel版本:


function sum(arr) {

return eval(arr.join('+'));

}

document.write(sum([1,2,3,4,5]));


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

foreach版本:

function remove(arr,item) {

var i=[];

arr.forEach( function(element, index) {

if (element!=item) {

key=element;

i.push(key);

}

});


return  i;

}


document.write(remove([1,2,3,4,5],2));


filter版本:

function remove(arr,item){

var res=arr.filter(function(i) {

return i!=item;

});

return res;


}


document.write(remove([1,2,3,4,5],2));


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


function removeWithoutCopy(arr, item) {

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

if (item==arr[i]) {

arr.splice(i,1);

i—;//数组会前移

}

}

return arr;

}

document.write(removeWithoutCopy([1,2,2,3,4,5,2,2],2));



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

function append(arr, item) {

return arr.concat(item);//push会改变原数组


}

document.write(append([1,2,2,3,4,5,2,2],888));

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

function truncate(arr) {

    return arr.slice(0, -1);//arr.length-1

 }

 

document.write(truncate([1,2,3,4]));


7.在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组 

function prepend(arr, item) {

    return [item].concat(arr);    

}


8.删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组 

function curtail(arr) {


return arr.slice(1);


}

document.write(curtail([1,2,3,4]));


9.合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组 

function concat(arr1, arr2) {

return arr1.concat(arr2);


}


10.在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组 

function insert(arr, item, index) {

return arr.slice(0, index).concat(item).concat(arr.slice(index));


}


11.统计数组 arr 中值等于 item 的元素出现的次数 


最基础版本:
function count(arr, item) {

var i=0;

arr.forEach( function(element, index) {

if (element==item) {

i++;

}

// statements

});

return i;

}

document.write(count([1, 2, 4, 4, 3, 4, 3], 4));


改进版:

function count(arr, item) {

var i=0;

arr.forEach( function(element, index) {

element == item ? i++ :0;

 

});

return i;

}


document.write(count([1, 2, 4, 4, 3, 4, 3], 4));


filter版本:

function count(arr, item) {

return arr.filter(function(i) {

return i==item;

}).length;

}


12.找出数组 arr 中重复出现过的元素 

function duplicates(arr) {

var a=[];

arr.forEach( function(element, index) {

if (element!=arr.lastIndexOf(element)&&a.indexOf(element)==-1) {

//防止新的数组有重复的数

a.push(element);

}


});


return a;

}

document.write(duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]));

filter版本:

function duplicate(arr){   

return arr.sort().filter(function(element,index) {

return element==arr[index-1] && element!=arr[index+1];

});


}

document.write(duplicate([1, 2, 4, 4, 3, 3, 1, 5, 3]));


13.为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组 


function square(arr) {

var b=[];

arr.forEach( function(element, index) {

var i=0;

i=element*element;

b.push(i);


// statements

});

return b;


}

document.write(square([1, 2, 3, 4]));


map版本:

function square(arr) {

return arr.map(function(elem) {

return elem*elem;

})


}

document.write(square([1, 2, 3, 4]));


14.在数组 arr 中,查找值与 item 相等的元素出现的所有位置 

最基础版本:


function findAllOccurrences(arr, target) {

var a=[];

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

if (arr[i]==target) {

a.push(i);

}

}

return a;

}

document.write(findAllOccurrences('abcdefabc'.split(''), ‘a'));


foreach版本:

function findAllOccurrences(arr, target) {

var temp=[];

arr.forEach( function(element, index) {

if (element==target) {

temp.push(index);

}

});

return temp;

}


foreach改进版:
function findAllOccurrences(arr, target) {

var temp=[];

arr.forEach( function(element, index) {

element!==target||temp.push(index);

});

return temp;

}


15.实现函数 functionFunction,调用之后满足如下条件:

1、返回值为一个函数 f

2、调用返回的函数 f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ', '

3、所有函数的参数数量为 1,且均为 String 类型 

function functionFunction(str) {

 function f(s){

  return str+", "+s;

 }

 return f;

}

document.write(functionFunction(‘Hello’)('world'));

两次调用函数,注意嵌套使用。


16.实现函数 makeClosures,调用之后满足如下条件:

1、返回一个函数数组 result,长度与 arr 相同

2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同 







17.已知函数 fn 执行需要 3 个参数。请实现函数 partial,调用之后满足如下条件:

1、返回一个函数 result,该函数接受一个参数

2、执行 result(str3) ,返回的结果与 fn(str1, str2, str3) 一致 

输入例子:

var sayIt = function(greeting, name, punctuation) {     return greeting + ', ' + name + (punctuation || '!'); };  partial(sayIt, 'Hello', 'Ellie')('!!!');


输出例子:

Hello, Ellie!!!


基础写法:

function partial(fn, str1, str2) {

function result(str3){

return fn(str1,str2,str3);

}

return result;


}


call版本:

function partial(fn, str1, str2) {

function result(str3){

return fn.call(this,str1,str2,str3);

}

return result;


}

apply版本

function partial(fn, str1, str2) {

function result(str3){

return fn.apply(this,[str1,str2,str3]);

}

return result;


}

bind版本:

function partial(fn, str1, str2) {

function result(str3){

return fn.bind(this,str1,str2)(str3);

}

return result;


}

匿名函数版本

function partial(fn, str1, str2) {

return function(str3){

return fn(str1,str2,str3);


}


}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值