JavaScript的array方法
javascript高级函数
1.map/reduce
map()
map()是array的一个方法
作用: 对array中每一个元素调用自定义函数
'use strict'; function pow(x){ return x*x; } var arr=[1,2,3,4,5] var newarray=arr.map(pow)
map的回调函数有三个参数:
callback(currentvalue, index, array)通常只要第一个参数
ps: map()传入的参数是pow,即函数对象本身
通常map调用的自定义方法只包含一个参数
reduce()
reduce()也是array的一个方法
作用: 从数组的前两个元素开始,作为函数参数,传入函数得到结果,
结果再和下一个数组元素再一次调用函数,直到数组尽头
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
ps: 通常reduce()调用的自定义方法只包含两个个参数
2.filter(筛选)
作用:把array
的某些元素过滤掉,然后返回剩下的元素.
和map()
类似,array
的filter()
也接收一个函数。和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后根据返回值是true
还是false
决定保留还是丢弃该元素。
//去掉空字符串
var arr = ['a', '', 'b', null, undefined, 'c', ' ']; var r = arr.filter(function (s) { return s && s.trim(); // 注意:ie9以下的版本没有trim()方法 }); r; // ['a', 'b', 'c']
回调函数
通常我们仅使用第一个参数,表示array
的某个元素。回调函数还可以接收另外两个参数,表示元素的位置和数组本身:
var arr = ['a', 'b', 'c']; var r = arr.filter(function (element, index, self) { console.log(element); // 依次打印'a', 'b', 'c' console.log(index); // 依次打印0, 1, 2 console.log(self); // self就是变量arr return true; });
筛选素数:
function get_primes(arr){ if(elem===1){ return false; } for(var i=2;i<=elem/2;i++){ if(elem%i==0) { return false; } } return true; }); return x; }
ps: 关键在于正确实现一个“筛选”函数
3.sort(排序)
默认排序会把所有元素转成string在排序,根据一个元素的ascii值进行排序(非递减)(timsort算法)
两两比较,当回调函数返回值大于0时,交换元素值
自定义数字排序
'use strict' var arr=[10,20,1,2]; arr.sort(function(x,y){ if (x < y) { return -1; } if (x > y) { return 1; } return 0; }); console.log(arr); // [1, 2, 10, 20]
数字倒序排列
var arr = [10, 20, 1, 2]; arr.sort(function (x, y) { if (x < y) { return 1; } if (x > y) { return -1; } return 0; }); // [20, 10, 2, 1]
4.其他的array方法
every()和some()
作用: 可以判断数组的所有元素是否满足测试条件(通过函数提供)
every()是全部满足的时候返回true,一个不满足返回false,并终止检测
some()是全部不满足的时候返回false,有一个满足就返回true
find()
作用: 查找第一个符合条件的元素
查找符合条件的第一个元素,如果找到了就返回这个元素,否则,返回undefined
findindex()
作用: 查找第一个符合条件的元素的索引
查找符合条件的第一个元素,找到这个元素就返回他的索引,如果没有找到就返回-1
foreach()
作用: 常用于遍历数组
(和map类似)把数组每个元素依次传入函数,但不会返回新的数组.