数组ES5拓展的方法以及实现方法
查找数组元素的索引值
- indexOf 和 lastiIndexOf
- indexOf 是从首往尾查找,当第一次找到匹配的成员元素时,返回该成员的索引值
- lastIndexOf是从尾往首查找,当第一次找到匹配的成员元素时,返回该成员的索引值
- 如果没有查找到成员,会返回-1
var arr = ["Hello", "World", "Hello", "World"]; var pos1 = arr.indexOf("Hello"); var pos2 = arr.lastIndexOf("Hello"); console.log(pos1); \\ 0 console.log(pos2); \\ 3
兼容IE6\7\8
if(!Array.prototype.indexOf) { Array.prototype.indexOf = function(item) { var arr = this; for(var i = 0; i < arr.length; i ++) { if(arr[i] === item) { return i; } } return -1; } Array.prototype.lastIndexOf = function(item) { var arr = this; for(var i = arr.length - 1; i > -1; i --) { if(arr[i] === item) { return i; } } return -1; } }
数组的迭代器
- forEach(fn)
- 遍历数组,执行函数fn,该函数会传入三个参数
- 第一个参数:成员值
- 第二个参数: 成员的索引值
- 第三个参数: 数组本身
- forEach没有返回值,如果在函数内对值进行操作,会影响原数组
兼容IE6\7\8
if(!Array.prototype.forEach) { Array.prototype.forEach = function(fn) { for(var i = 0; i < this.length; i ++) { fn(this[i], i, this); } } }
- 如果使用jQuery的话,不需要考虑兼容性问题,因此也可以兼容IE6\7\8,传入两个参数
- 第一个参数:要遍历的数组
- 第二个参数:函数,该函数传入两个参数,第一个是索引值,第二个是成员值,注意与forEach不同
$.each(arr, function(index, value));
- 遍历数组,执行函数fn,该函数会传入三个参数
- map(fn)
- 遍历数组并且映射,返回一个新的数组,同样会传入三个参数,与forEach传入的三个参数一样
- 该方法会返回一个新数组,不会影响到原数组
兼容IE6\7\8
if(!Arrray.prototype.map) { Array.prototype.map = function(fn) { var result = new Array(); for(var i = 0; i < this.length; i ++) { result.push(fn(this[i], i, this)); } return result; } }
- some(fn)
- 遍历数组并判断是否满足条件,如果有满足的返回true,都没有满足则返回false
- 该方法与forEach方法传入fn的三个参数一样
兼容IE6\7\8
if(!Array.prototype.some) { Array.prototype.some = function(fn) { for(var i = 0; i < this.length; i ++) { if(fn()) { return true; } } return false; } }
- every(fn)
- 遍历数组并判断是偶满足条件,如果有不满足的返回false,都满足则返回true
- 该方法与forEach方法传入fn的三个参数一样
兼容IE6\7\8
if(!Array.prototype.every) { Array.prototype.every = function(fn) { for(var i = 0; i < this.length; i ++) } }