数组Array高阶方法之filter()、map()、sort()、reduce()

filter()(原数组未改变)

filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。

和map()类似,Array的filter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。

例如,在一个Array中,删掉偶数,只保留奇数,可以这么写:

 var arr1 = [1,2,4,5,6,9,10,15];
 var r = arr1.filter(function(x) {
   return x % 2 !== 0;
 });
 console.log(arr1,r);  //[1, 2, 4, 5, 6, 9, 10, 15]   [1, 5, 9, 15]

map()(原数组未改变)

返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

 var numbers = [4, 9, 16, 25];
 var c1=numbers.map(Math.sqrt);
 console.log(numbers,c1);//[4, 9, 16, 25] [2, 3, 4, 5]

sort() (原数组改变)

排序算法:

Array的sort()方法就是用于排序的。但是排序结果可能让你大吃一惊。

如果调用该方法时没有使用参数,Array的sort()方法默认把所有元素先转换为String再按照字符编码的顺序进行排序,结果‘10’排在了‘2’的前面,因为字符‘1’比字符‘2’的ASCII码小。
例子

<script type="text/javascript">

var arr = [10,5,40,25,1000,1]
var arr1 = arr.sort()
console.log(arr)//1,10,1000,25,40,5
console.log(arr1)//1,10,1000,25,40,5
</script>

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。通常规定,对于两个元素x和y,如果认为x<y,则返回-1,如果x==y,则返回0,如果认为x>y,则返回1

升序                                  降序

    var arr=[10,20,1,2];             var arr=[10,20,1,2];             
    arr.sort(function(x,y){          arr.sort(function(x,y){       
      x>y?1:-1                         x<y?1:-1
    });//[1,2,10,20]                 });//[1,2,10,20]

reduce()

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
[x1,x2,x3,x4].reduce(f) = f(f(f(x1,x2),x3),x4)

比如说对一个Array求和,就可以用reduce实现:

var arr = [1,3,5,7,9];
arr.reduce(function(x,y){        
  return x+y;
});//25

要把[1,3,5,7,9]变换成整数13579,reduce()也能派上用场:

var arr = [1,3,5,7,9];
  arr.reduce(function(x,y) {        return x*10+y;
});//13579
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值