mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 18:32:22 +00:00
修改array/comprehesion
This commit is contained in:
parent
0a6ad94871
commit
180792d54b
@ -145,7 +145,7 @@ ES6提供简洁写法,允许直接通过现有数组生成新数组,这被
|
||||
```javascript
|
||||
|
||||
var a1 = [1, 2, 3, 4];
|
||||
var a2 = [i * 2 for (i of a1)];
|
||||
var a2 = [for (i of a1) i * 2];
|
||||
|
||||
a2 // [2, 4, 6, 8]
|
||||
|
||||
@ -153,6 +153,26 @@ a2 // [2, 4, 6, 8]
|
||||
|
||||
上面代码表示,通过for...of结构,数组a2直接在a1的基础上生成。
|
||||
|
||||
注意,数组推导中,for...of结构总是写在最前面,返回的表达式写在最后面。
|
||||
|
||||
for...of后面还可以附加if语句,用来设定循环的限制条件。
|
||||
|
||||
```javascript
|
||||
|
||||
var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
|
||||
|
||||
[for (year of years) if (year > 2000) year];
|
||||
// [ 2006, 2010, 2014 ]
|
||||
|
||||
[for (year of years) if (year > 2000) if(year < 2010) year];
|
||||
// [ 2006]
|
||||
|
||||
[for (year of years) if (year > 2000 && year < 2010) year];
|
||||
// [ 2006]
|
||||
|
||||
```
|
||||
上面代码表明,if语句写在for...of与返回的表达式之间,可以使用多个if语句。
|
||||
|
||||
数组推导可以替代map和filter方法。
|
||||
|
||||
```javascript
|
||||
@ -161,7 +181,7 @@ a2 // [2, 4, 6, 8]
|
||||
// 等价于
|
||||
[1, 2, 3].map(function (i) { return i * i });
|
||||
|
||||
[i for (i of [1,4,2,3,-8]) if (i < 3)];
|
||||
[for (i of [1,4,2,3,-8]) if (i < 3) i];
|
||||
// 等价于
|
||||
[1,4,2,3,-8].filter(function(i) { return i < 3 });
|
||||
|
||||
@ -169,7 +189,7 @@ a2 // [2, 4, 6, 8]
|
||||
|
||||
上面代码说明,模拟map功能只要单纯的for...of循环就行了,模拟filter功能除了for...of循环,还必须加上if语句。
|
||||
|
||||
新引入的for...of结构,可以直接跟在表达式的前面或后面,甚至可以在一个数组推导中,使用多个for...of结构。
|
||||
在一个数组推导中,还可以使用多个for...of结构,构成多重循环。
|
||||
|
||||
```javascript
|
||||
|
||||
@ -177,7 +197,7 @@ var a1 = ["x1", "y1"];
|
||||
var a2 = ["x2", "y2"];
|
||||
var a3 = ["x3", "y3"];
|
||||
|
||||
[(console.log(s + w + r)) for (s of a1) for (w of a2) for (r of a3)];
|
||||
[for (s of a1) for (w of a2) for (r of a3) console.log(s + w + r)];
|
||||
// x1x2x3
|
||||
// x1x2y3
|
||||
// x1y2x3
|
||||
@ -197,9 +217,9 @@ var a3 = ["x3", "y3"];
|
||||
|
||||
```javascript
|
||||
|
||||
[c for (c of 'abcde') if (/[aeiou]/.test(c))].join('') // 'ae'
|
||||
[for (c of 'abcde') if (/[aeiou]/.test(c)) c].join('') // 'ae'
|
||||
|
||||
[c+'0' for (c of 'abcde')].join('') // 'a0b0c0d0e0'
|
||||
[for (c of 'abcde') c+'0'].join('') // 'a0b0c0d0e0'
|
||||
|
||||
```
|
||||
|
||||
@ -211,4 +231,4 @@ var a3 = ["x3", "y3"];
|
||||
|
||||
这两个方法用于监听(取消监听)数组的变化,指定回调函数。
|
||||
|
||||
它们的用法与Object.observe和Object.unobserve方法完全一致,请参阅《对象的扩展》一章。唯一的区别是,对象可监听的变化一共有六种,而数组只有四种:add、update、delete、splice(数组的length属性发生变化)。
|
||||
它们的用法与Object.observe和Object.unobserve方法完全一致,也属于ES7的一部分,请参阅《对象的扩展》一章。唯一的区别是,对象可监听的变化一共有六种,而数组只有四种:add、update、delete、splice(数组的length属性发生变化)。
|
||||
|
Loading…
x
Reference in New Issue
Block a user