目录:
1.查找数组元素位置
2.数组求和
3.移除数组中的元素
1.查找数组元素位置
function indexOf(arr, item) {
if (Array.prototype.indexOf){//在IE8版本以下(含IE8)都不支持Indexof()方法
return arr.indexOf(item);
} else {
for (var i = 0; i < arr.length; i++){
if (arr[i] === item){
return i;
}
}
}
return -1;
}
2.数组求和
不考虑算法复杂度,用递归做:
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;
});
}
reduce里面可使用最多四个参数来声明回调函数。
function callbackfn(previousValue, currentValue, currentIndex, array1)
回调参数
-previousValue: 通过上一次调用回调函数获得的值。如果向 reduce 方法提供 initialValue,则在首次调用函数时,previousValue 为 initialValue。
-currentValue: 当前数组元素的值。
-currentIndex: 当前数组元素的数字索引。
-array1: 包含该元素的数组对象。
参考:https://msdn.microsoft.com/library/ff679975(v=vs.94).aspx
forEach遍历:
function sum(arr) {
var s = 0;
arr.forEach(function(val, idx, arr) {//这里用map也一样
s += val;
}, 0);
return s;
};
forEach是ES5中操作数组的一种方法,主要功能是遍历数组。
语法:array1.forEach(callbackfn[, thisArg])
参数 | 定义 |
---|---|
array1 | 必选。一个数组对象。 |
callbackfn | 必选。最多可以接受三个参数的函数。对于数组中的每个元素,forEach 都会调用 callbackfn 函数一次。 |
thisArg | 可选。 callbackfn 函数中的 this 关键字可引用的对象。如果省略 thisArg,则 undefined 将用作 this 值。 |
回调参数:
val: 数组元素的值。
idx: 数组元素的数字索引。
arr: 包含该元素的数组对象。
eval:
function sum(arr) {
return eval(arr.join("+"));
};
3.移除数组中的元素
题目要求不改变原数组,所以可以声明一个数组a用于保存arr中不同于item的值,最后将a返回。
function remove(arr, item) {
//声明一个新数组保存结果
var a = [];
//循环遍历
for(var i=0; i < arr.length; i++){
//如果arr[i]不等于item,就加入数组a
if(arr[i] != item){
a.push(arr[i]);
}
}
return a;
}