1、找出元素 item 在给定数组 arr 中的位置
如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1
function indexOf(arr, item) {
return arr.indexOf(item);
}
2、计算给定数组 arr 中所有元素的总和
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;
});
}
forEach遍历:
function sum(arr) {
var s = 0;
arr.forEach(function(val, idx, arr) {
s += val;
}, 0);
return s;
};
eval:
function sum(arr) {
return eval(arr.join("+"));
};
3、移除数组 arr 中的所有值与 item 相等的元素。直接修改数组 arr,结果返回
function removeWithoutCopy(arr, item) {
for(var i=0;i<arr.length;i++){
if(arr[i]==item){
arr.splice(i,1);
i--;
}
}
return arr;
}
4、删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
function truncate(arr) {
return arr.slice(0, -1);
}
5、在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
//使用slice浅拷贝+push组合
var append2 = function(arr, item) {
var newArr = arr.slice(0); // slice(start, end)浅拷贝数组
newArr.push(item);
return newArr;
};
// 使用concat将传入的数组或非数组值与原数组合并,组成一个新的数组并返回
var append3 = function(arr, item) {
return arr.concat(item);
};
6、在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
//利用concat
function prepend(arr, item) {
return [item].concat(arr);
}
//使用push.apply
function prepend(arr, item) {
var newArr=[item];
[].push.apply(newArr, arr);
return newArr;
}
//利用slice+unshift/splice
function prepend(arr, item) {
var newArr=arr.slice(0);
newArr.unshift(item);//newArr.splice(0,0,item);
return newArr;
}
//使用join+split+unshift/splice组合
function prepend(arr, item) {
var newArr=arr.join().split(',');
newArr.unshift(item);//newArr.splice(0,0,item);
return newArr;
}
//普通的迭代拷贝
function prepend(arr, item) {
var newArr=[];
for(var i=0;i<arr.length;i++){
newArr.push(arr[i]);
}
newArr.unshift(item);
return newArr;
}
7、删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组
//利用slice
function curtail(arr) {
return arr.slice(1);
}
//利用filter
function curtail(arr) {
return arr.filter(function(v,i) {
return i!==0;
});
}
//利用push.apply+shift
function curtail(arr) {
var newArr=[];
[].push.apply(newArr, arr);
newArr.shift();
return newArr;
}
//利用join+split+shift 注意!!!:数据类型会变成字符型
function curtail(arr) {
var newArr = arr.join().split(',');
newArr.shift();
return newArr;
}
//利用concat+shift
function curtail(arr) {
var newArr = arr.concat();
newArr.shift();
return newArr;
}
//普通的迭代拷贝
function curtail(arr) {
var newArr=[];
for(var i=1;i<arr.length;i++){
newArr.push(arr[i]);
}
return newArr;
}
8、合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组
//利用concat
function concat(arr1, arr2) {
return arr1.concat(arr2);
}
//利用slice+push.apply
function concat(arr1, arr2) {
var newArr=arr1.slice(0);
[].push.apply(newArr, arr2);
return newArr;
}
//利用slice+push
function concat(arr1, arr2) {
var newArr=arr1.slice(0);
for(var i=0;i<arr2.length;i++){
newArr.push(arr2[i]);
}
return newArr;
}
//普通的迭代拷贝
function concat(ar