Q1:找出元素 item 在给定数组 arr 中的位置 ,如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1.
function indexOf(arr, item) {
if(arr.__proto__.indexOf){
return arr.indexOf(item);
}
else{
for(
var i=
0;i<arr.length;i++){
if(arr[i] == item)
return i;
}
}
return -
1;
}
注意的一点就是想要用Js的内置方法需要先检验下该方法是否存在。
Q2:计算给定数组 arr 中所有元素的总和 .
var arr = [
1,
2,
3,
4];
var sum1 =
function(arr){
var res =
0 ;
arr.forEach(
function(val,i){
res += val;
})
return res;
}
var sum2 =
function(arr){
arr.reduce(
function(prev,curr,id,arr){
return prev+curr;
})
}
var sum3 =
function(arr){
return eval(arr.join(
'+'));
}
这道在于你能找出几种方法去解决,eval()函数用于计算参数的js代码
Q3:移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
var arr = [
1,
2,
3,
4,
2];
var remove =
function(arr,item){
var res = arr.slice(
0);
for(
var i =
0;i<res.length;i++){
if(res[i] === item){
res.splice(i,
1);
--i;
}
}
return res;
}
var remove1 =
function(arr,item){
var res = [];
arr.forEach(
function(val,i){
if(val !== item){
res.push(val);
}
})
return res;
}
var remove2 =
function(arr,item){
if(
Array.prototype.filter){
return arr.filter(
function(val){
return val !== item;
})
}
}
splice()会改变原数组,返回截取的元素数组。slice()不会改变原数组,返回想要获取的元素,slice(start,end),参数为获取区间,end不写表示获取到结束位置。
Q4:在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
var arr = [
1,
2,
3,
4,
2];
var append =
function(arr,item){
var res = arr.slice(
0);
res.push(item);
return res;
}
var append1 =
function(arr,item){
var res = [];
arr.forEach(
function(val,i,arr){
res.push(val);
})
res.push(item);
return res;
}
var append2 =
function(arr,item){
if(
Array.prototype.concat){
return arr.concat(item);
}
}
利用concat在末尾添加元素,可以添加单个元素或者是整个数组,返回新数组,不修改原数组。
Q5:删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组 .
var curtail =
function(arr){
var res = arr.slice(
0);
res.shift();
return res;
}
var curtail1 =
function(arr){
return arr.slice(
1);
}
var curtail2 =
function(arr){
return arr.filter(
function(val,i){
if(i!=
0)
return val;
})
}
Q6:统计数组 arr 中值等于 item 的元素出现的次数
var arr = [
1,
2,
3,
4,
2];
var count =
function(arr,item){
var cnt =
0;
arr.forEach(
function(val,i){
val === item?cnt++:
0;
})
return cnt;
}
var count1 =
function(arr,item){
return arr.filter(
function(val){
return val === item;
}).length;
}
var count2 =
function(arr,item){
var cnt;
cnt = arr.reduce(
function(prev,curr){
return curr === item? ++prev : prev;
},
0);
return cnt;
}
Q7:找出数组 arr 中重复出现过的元素
var arr = [
1,
2,
3,
4,
2,
3];
var duplicates =
function(arr){
var res = [];
var obj = {};
arr.forEach(
function(val,i){
if(obj[val]==
1){
res.push(val);
obj[val]++;
}
else if(obj[val]>
1){
obj[val]++;
}
else{
obj[val]=
1;
}
})
return res;
}
var duplicates1 =
function (arr){
var res = [];
arr.forEach(
function(val){
if(arr.indexOf(val) !== arr.lastIndexOf(val) && res.indexOf(val) === -
1){
res.push(val);
}
})
return res;
}
var duplicates2 =
function(arr){
return arr.sort().filter(
function(val,i){
return arr[i]===arr[i+
1] && arr[i]!==arr[i-
1];
})
}
其实也可以开多一个数组进行下标计数,但是考虑到可能要开很大的数,所以就没用这种方法。
Q8:为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
var arr = [
1,
2,
3];
var square =
function(arr){
var res = [];
arr.forEach(
function(x){
res.push(x*x);
})
return res;
}
var square1 =
function(arr){
return arr.map(
function(x){
return x*x;
})
}
Q9:在数组 arr 中,查找值与 item 相等的元素出现的所有位置
var arr = [
1,
2,
3,
2,
4];
var find =
function(arr,item){
var pos =
0;
var res = [];
while(pos !== -
1){
pos = arr.indexOf(item,pos);
if(pos === -
1){
break;
}
else{
res.push(pos);
pos++;
}
}
return res;
}
var find1 =
function(arr,item){
var res = [];
arr.filter(
function(val,i){
return val===item&&res.push(i);
})
return res;
}
var find2 =
function(arr,item){
var res = [];
arr.forEach(
function(val,i){
if(val === item){
res.push(i);
}
})
return res;
}
fitlter 真是无所不能啊。
转载请注明原文地址: https://ju.6miu.com/read-1125207.html