JavaScript高阶函数(filter/sort)

96
SpiffyEight77
2017.07.26 16:46* 字数 324
JavaScript

JavaScript高阶函数(filter/sort)

filter()

  • filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素
  • filter()方法用于把Array的某些元素过滤掉,然后返回剩下的元素
  • filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素
  • filter()跟map()很相似也是接收一个参数,但是不同的是filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素

过滤掉数组中的奇数

'use strict'
var arr = [1,2,3,4,5,6,7,8,9,10]; //过滤掉数组中的奇数
var result = arr.filter(function (x) {
        return x % 2 == 0;
});
console.log(result);

过滤掉数组中的素数

var arr = [2,3,5,7,9,16,25,23,31,7,8];
var r = arr.filter(function(x) {
        for(var i = 2; i <= Math.sqrt(x); i++)
            return x % i == 0;
});
console.log(r);

过滤掉数组中的空字符串

var arr = ['A','B',' ','D',null,undefined,'E'];
var r = arr.filter(function(x) {
        return x && x.trim();
});
console.log(r);

筛选出素数

var arr = [2,1,2,3,5,7,9,16,25,23,31,7,8];
var r = arr.filter(function(x) {
    var f = true;
    if(x == 1)
        return false;
        for(var i = 2; i <= Math.sqrt(x); i++)
            if(x % i == 0)
            {
                f = false;
                break;
            }
        return f == true;
});
console.log(r);

去除数组重复元素

var arr = ['a','a','a','b','b','c',1,2,1,4,2];
var r = arr.filter(function(x,p,s) {
    return s.indexOf(x) == p; //indexOf每次返回元素在数组中第一次出现的位置
});
console.log(r);

sort()

  • JavaScript的sort()方法是根据ASCII码来进行排序
    与其他语言的sort()方法比较确实是够奇葩的
  • 根据两个元素比较返回的值进行排序
    如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1

升序输出数字

var arr = [1,6,1,2,3,4,631,23,13,12436,7,51,31,1,23,123,123,1];
arr.sort(function (x,y) {
    return x - y;
});
console.log(arr);

降序输出数字

var arr = [1,6,1,2,3,4,631,23,13,12436,7,51,31,1,23,123,123,1];
arr.sort(function (x,y) {
    return y - x;
});
console.log(arr);

字典序输出字符串

var arr = ['apple','das','hrtjtyj','das','adsfreger','grhtrjtyj'];
console.log(arr.sort());

逆字典序输出字符串

var arr = ['apple','das','hrtjtyj','das','adsfreger','grhtrjtyj'];
console.log(arr.sort().reverse());
JavaScript
Web note ad 1