【ES6】map、reduce、filter、sort、箭头函数、class继承、yield

map

var arr = [1,2,3,4,5,6,7,8,9];
var s = arr.map(String);
console.info(s)

function pow(x){
        return x * x;
}

var results = arr.map(pow);
console.info(results);
const arr =  [1,2,3,4,5,6,7,8,9];
const arr = arr.map(String);
console.log(s);

const results = arr.map(x=>x*x);
console.log(results)

//(9) ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
//(9) [1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce

这个函数必须接受连个参数,reduce()把结果继续和序列的下一个元素做累积计算

var func = function(x,y){
      return x + y;
}

var arr = [1,3,5,7,9];
var result = arr.reduce(func);

console.log(result)
const arr = [1,3,5,7,9];
const result = arr.reduce((x,y)=>x+y)
//结果是25

filter

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

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

filter接受的回调函数,其实可以有多个参数。通常我们仅使用第一个参数,表示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;
});
console.log(r);

/*
A
0["A", "B", "C"]
B
1["A", "B", "C"]
C
2["A", "B", "C"]
["A", "B", "C"]
*/

sort

这是因为Array的sort()方法默认把所有元素先转换成String再排序,结果‘10‘排在‘2‘的前面,因为字符‘1‘比字符‘2‘的ASCII码小。

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)
var arr = [10,20,1,2];

arr.sort((x,y) => x > y ? 1 : x < y ? -1 : 0);

console.log(arr);
//[1,2,10,20]

sort()方法会直接对Array进行修改,它返回的结果仍是当前Array

var a1 = ["B", "A", "C"];
var a2 = a1.sort();
a1;     //["A", "B", "C"];
a2;     //["A", "B", "C"];
a1 === a2;  //true     a1和a2是同一个对象

箭头函数

为什么叫Arrow Function? 因为它的定义用的是一个箭头:

x => x * x;

上面的箭头函数等同于

function (x){
      return  x * x;
}

我们还可以这样使用

//两个参数:
(x,y) => x * x + y * y

//无参数
() => 3.14

//可变参数:
(x, y, ...rest) => {
       var i, sum = x + y;
       for(i=0;i<rest.length; i++){
            sum += rest[i]
     }
      return sum;
}

如果要返回一个对象

x => ({ foo: x})

箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数的内部的this是词法作用域,由上下文确定。

var obj = {
    birth: 1990,
    getAge: function () {
        var b = this.birth; // 1990
        var fn = function () {
            return new Date().getFullYear() - this.birth; // this指向window或undefined
        };
        return fn();
    }
};

var ret = obj.getAge()
console.info(ret)

//NaN
var obj = {
    birth: 1990,
    getAge: function () {
        var b = this.birth; // 1990
        var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
        return fn();
    }
};
var ret = obj.getAge();
console.info(ret)

//28

class继承

    class Student {
        constructor(name){
            this.name = name;
        }
        hello() {
            console.log(‘Hello, ‘ + this.name + ‘!‘ )
        }
    }
    var xiaoming = new Student(‘小明‘);
    xiaoming.hello();

    class PrimaryStudent extends Student {
        constructor(name,grade){
            super(name); //记得用super调用父级的构造方法
            this.grade = grade;
        }

        myGrade(){
            console.log(‘I am at grade ‘ + this.grade)
        }
    }

    var xiaohua = new PrimaryStudent(‘小华‘,1);
    xiaohua.hello();
    xiaohua.myGrade();

//Hello, 小明!
//Hello, 小华!
//I am at grade 1

yield

function * fibonacci(){
    yield 1;
    yield 2;
    return 2 ;
}

var it = fibonacci();
console.log(it);        //"Generator{  }"
console.log(it.next()); //1
console.log(it.next()); //2
console.log(it.next()); //undefined

var itt = fibonacci();
//而且Itrrator的return的值不会被for...of循环到,也不会被扩展符遍历到
for(var per of itt){
    console.log(per);
}

//fibonacci {<suspended>}
// {value: 1, done: false}
// {value: 2, done: false}
// {value: 2, done: true}
// 1
// 2
function * foo(){
    yield 0;
    yield 1;
}

function * bar(){
    yield ‘x‘;
    yield* foo();
    yield ‘y‘;
}
for(let v of bar()){
    console.log(v);
}

//x
//0
//1
//y

原文地址:https://www.cnblogs.com/tommymarc/p/12100045.html

时间: 2024-10-16 20:05:15

【ES6】map、reduce、filter、sort、箭头函数、class继承、yield的相关文章

Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 而函数式编程(请注意多了一个"式"字)--Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算. 我们首先要搞明白计算机(Computer)和计算(Compute)的概念. 在计算机的层次上,CPU执行的是加减乘除的指令代码

JavaScript高阶函数 map reduce filter sort

本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 高阶函数 一个函数就接收另一个函数作为参数,这种函数就称之为高阶函数 1.高阶函数之map: 此时我们有一个数组和一个接受一个参数并返回一个数的函数.我们需要把这个数组的每一个值在这个函数上走一遍,从而得到一个新数组.此时就需要map了 var a = [1,2,3,4,5,6]; var b = [] var fun = function(x) { return x * x; } b = a.map(fun) alert(b)  /

[python基础知识]python内置函数map/reduce/filter

python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法)来迭代遍历每个序列中的元素. 返回bool_func结果为true的元素的序列(注意弄清楚序列是什么意思)http://blog.csdn.net/bolike/article/details/19997465序列参考</a> 如果filter参数值为None,list参数中所有为假的元 素都将被

day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数

基础篇 本章大纲: 协程函数 递归函数 匿名函数lambda 内置函数map reduce filter  max min zip sorted 匿名函数lambda和内置函数结合使用 面向过程编程与函数编程 模块与包的使用 re模块内置函数 一,协程函数 注意:函数先定义,后使用.这是函数第一原则.函数主要分为定义,调用 1.1,什么是协程函数 协程函数特点:yield变为表达式,可以通过g.send(value)传值,用send传值时协程函数需要初始化,也可以说是生成器函数的一种 1.2,协

python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 函数式编程:是使用一系列函数去解决问题,函数式编程就是根据编程的范式来的出想要的结果,只要是输入时确定的,输出就是确定的. 1.2高阶函数 能把函数作为参数传入,这样的函数就称为高阶函数. 1.2.1函数即变量 以python的内置函数print()为列,调用该函数一下代码 >>> pri

Python-函数式编程-map reduce filter lambda 三元表达式 闭包

lambda 匿名函数,核心是作为算子,处理逻辑只有一行但具有函数的特性,核心用于函数式编程中 三元运算符 其实本质上是if分支的简化版,满足条件返回 if 前面的值,不满足条件返回 else后面的值 # 100 < 100 返回 False, 则 返回 else后面的值 value = 100 if 100 < 100 else 10 print(value) map 映射函数(依次把可迭代对象(可多个)中的值依次传递到函数中,然后返回生成器(长度以最短的为基础)) numbers = [1

Demo of Python &quot;Map Reduce Filter&quot;

Here I share with you a demo for python map, reduce and filter functional programming thatowned by me(Xiaoqiang). I assume there are two DB tables, that `file_logs` and `expanded_attrs` which records more columns to expand table `file_logs`. For demo

Python基础篇【第2篇】: Python内置函数--map/reduce/filter/sorted

Python内置函数 lambda lambda表达式相当于函数体为单个return语句的普通函数的匿名函数.请注意,lambda语法并没有使用return关键字.开发者可以在任何可以使用函数引用的位置使用lambda表达式.在开发者想要使用一个简单函数作为参数或者返回值时,使用lambda表达式是很方便的.总结:处理简单逻辑,自动返回结果 语法格式: lambda parameters: expression 就相当于 def fun(args) return expression 并且lam

函数式编程 &amp; Python中的高阶函数map reduce filter 和sorted

1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数式编程的第一型.在面向对象编程中,我们把对象传来传去,那在函数式编程中,我们要做的是把函数传来传去,而这个,说成术语,我们把他叫做高阶函数.飞林沙 2)特点 计算视为视为函数而非指令 纯函数式编程:不需变量,无副作用,测试简单(每次的执行结果是一样的) 支持高阶函数,代码简洁 2. python支持

王亟亟的Python学习之路(八)-函数式编程,map(),reduce(),filter()

转载请注明出处:王亟亟的大牛之路 首先在这里祝愿大家,新年快乐,工作顺利,BUG少少!!! 本来说是在春节假期内继续维持着写文章的进度,但是还是偷懒了几天(打了4天SC2哈哈哈) 今天上的是关于Python的文章,毕竟在亲戚家拜年,懒得插各类手机调试什么的,况且确实好久没有弄Python了,就写了,废话不多,开始正题!! 函数式编程 函数是什么? 把复杂的操作化为简单的函数分解成简单的操作,这种操作就是面向过程,也就是C这类的实现的大体概念. 函数式是什么? 函数没有变量,任意一个函数,只要输入