1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00

修改array/comprehesion

This commit is contained in:
ruanyf 2014-06-12 14:17:54 +08:00
parent 0a6ad94871
commit 180792d54b

View File

@ -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属性发生变化