From f5ec2938b4355d10262be1d1cbcd768bde219515 Mon Sep 17 00:00:00 2001 From: ruanyf Date: Thu, 26 Nov 2015 11:02:28 +0800 Subject: [PATCH] edit array/compresion --- docs/array.md | 54 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/docs/array.md b/docs/array.md index bd97f5e..b4c0607 100644 --- a/docs/array.md +++ b/docs/array.md @@ -512,7 +512,7 @@ a2 // [2, 4, 6, 8] 注意,数组推导中,`for...of`结构总是写在最前面,返回的表达式写在最后面。 -for...of后面还可以附加if语句,用来设定循环的限制条件。 +`for...of`后面还可以附加`if`语句,用来设定循环的限制条件。 ```javascript var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ]; @@ -527,9 +527,33 @@ var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ]; // [ 2006] ``` -上面代码表明,if语句写在for...of与返回的表达式之间,可以使用多个if语句。 +上面代码表明,`if`语句要写在`for...of`与返回的表达式之间,而且可以多个`if`语句连用。 -数组推导可以替代map和filter方法。 +下面是另一个例子。 + +```javascript +var customers = [ + { + name: 'Jack', + age: 25, + city: 'New York' + }, + { + name: 'Peter', + age: 30, + city: 'Seattle' + } +]; + +var results = [ + for (c of customers) + if (c.city == "Seattle") + { name: c.name, age: c.age } +]; +results // { name: "Peter", age: 30 } +``` + +数组推导可以替代`map`和`filter`方法。 ```javascript [for (i of [1, 2, 3]) i * i]; @@ -541,14 +565,14 @@ var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ]; [1,4,2,3,-8].filter(function(i) { return i < 3 }); ``` -上面代码说明,模拟map功能只要单纯的for...of循环就行了,模拟filter功能除了for...of循环,还必须加上if语句。 +上面代码说明,模拟`map`功能只要单纯的`for...of`循环就行了,模拟`filter`功能除了`for...of`循环,还必须加上`if`语句。 -在一个数组推导中,还可以使用多个for...of结构,构成多重循环。 +在一个数组推导中,还可以使用多个`for...of`结构,构成多重循环。 ```javascript -var a1 = ["x1", "y1"]; -var a2 = ["x2", "y2"]; -var a3 = ["x3", "y3"]; +var a1 = ['x1', 'y1']; +var a2 = ['x2', 'y2']; +var a3 = ['x3', 'y3']; [for (s of a1) for (w of a2) for (r of a3) console.log(s + w + r)]; // x1x2x3 @@ -561,9 +585,9 @@ var a3 = ["x3", "y3"]; // y1y2y3 ``` -上面代码在一个数组推导之中,使用了三个for...of结构。 +上面代码在一个数组推导之中,使用了三个`for...of`结构。 -需要注意的是,数组推导的方括号构成了一个单独的作用域,在这个方括号中声明的变量类似于使用let语句声明的变量。 +需要注意的是,数组推导的方括号构成了一个单独的作用域,在这个方括号中声明的变量类似于使用`let`语句声明的变量。 由于字符串可以视为数组,因此字符串也可以直接用于数组推导。 @@ -577,16 +601,6 @@ var a3 = ["x3", "y3"]; 数组推导需要注意的地方是,新数组会立即在内存中生成。这时,如果原数组是一个很大的数组,将会非常耗费内存。 -推导的用法不限于数组,还可以直接使用。 - -```javascript -var results = ( - for (c of customers) - if (c.city == "Seattle") - { name: c.name, age: c.age } -) -``` - ## Array.observe(),Array.unobserve() 这两个方法用于监听(取消监听)数组的变化,指定回调函数。