Coffeescript 简明教程
CoffeeScript - Comprehensions
在上一个章节中,我们了解了 CoffeeScript 提供的各种循环、 while 及其变体。除此之外,CoffeeScript 还提供了称为 comprehensions 的附加循环结构。
如果我们添加可选的保护子句和当前数组索引的值,这些列表解析会替换其他编程语言中的 for 循环。使用列表解析,我们可以遍历数组和对象,而遍历数组的列表解析是表达式,而且我们可以在函数中返回它们或将它们分配给变量。
S.No. |
Statement & Description |
1 |
for..in comprehensions for..in 列表解析是 CoffeeScript 中列表解析的基本形式,使用它,我们可以遍历列表或数组的元素。 |
2 |
for..of comprehensions 就像数组一样,CoffeeScript 提供容器来存储键值对,这些容器称为对象。我们可以使用 CoffeeScript 提供的 for..of 列表解析来遍历对象。 |
3 |
list comprehensions CoffeeScript 中的 list 列表解析用于将一个对象数组映射到另一个数组。 |
Index of comprehensions
元素列表/数组有一个索引,可以在列表解析中使用。您可以使用变量在列表解析中使用它,如下所示:
for student,i in [element1, element2, element3]
Example
以下示例演示了在 CoffeeScript 中使用 for…in 理解的索引。将以下代码保存在一个名叫 for_in_index.coffee 的文件中
for student,i in ['Ram', 'Mohammed', 'John']
console.log "The name of the student with id "+i+" is: "+student
打开 command prompt 并按照以下所示编译 .coffee 文件。
c:\> coffee -c for_in_index.coffee
编译后,它会给你以下 JavaScript。
// Generated by CoffeeScript 1.10.0
(function() {
var i, j, len, ref, student;
ref = ['Ram', 'Mohammed', 'John'];
for (i = j = 0, len = ref.length; j < len; i = ++j) {
student = ref[i];
console.log("The name of the student with id " + i + " is: " + student);
}
}).call(this);
现在,再次打开 command prompt 并按照以下所示运行 CoffeeScript 文件。
c:\> coffee for_in_index.coffee
执行后,CoffeeScript 文件产生以下输出。
The name of the student with id 0 is: Ram
The name of the student with id 1 is: Mohammed
The name of the student with id 2 is: John
Postfix form of comprehensions
与后缀 if 和 unless 类似,CoffeeScript 提供了理解的后缀形式,在编写代码时非常方便。使用此功能,我们可以在单行中编写 for..in 理解,如下所示。
#Postfix for..in comprehension
console.log student for student in ['Ram', 'Mohammed', 'John']
#postfix for..of comprehension
console.log key+"::"+value for key,value of { name: "Mohammed", age: 24, phone: 9848022338}
Assigning to a variable
我们用于遍历数组的理解可以赋值给变量,也可以由函数返回。
Example
考虑以下示例。在这里,您可以观察到我们使用 for..in 理解检索了数组的元素,并将其赋给名为 names 的变量。我们还拥有一个函数,该函数使用 return 关键字明确返回理解。将以下代码保存在一个名叫 example.coffee 的文件中
my_function =->
student = ['Ram', 'Mohammed', 'John']
#Assigning comprehension to a variable
names = (x for x in student )
console.log "The contents of the variable names are ::"+names
#Returning the comprehension
return x for x in student
console.log "The value returned by the function is "+my_function()
打开 command prompt 并按照以下所示编译 .coffee 文件。
c:\> coffee -c example.coffee
编译后,它会给你以下 JavaScript。
// Generated by CoffeeScript 1.10.0
(function() {
var my_function;
my_function = function() {
var i, len, names, student, x;
student = ['Ram', 'Mohammed', 'John'];
names = (function() {
var i, len, results;
results = [];
for (i = 0, len = student.length; i < len; i++) {
x = student[i];
results.push(x);
}
return results;
})();
console.log("The contents of the variable names are ::" + names);
for (i = 0, len = student.length; i < len; i++) {
x = student[i];
return x;
}
};
console.log("The value returned by the function is " + my_function());
}).call(this);
现在,再次打开 command prompt 并按照以下所示运行 CoffeeScript 文件。
c:\> coffee example.coffee
执行后,CoffeeScript 文件产生以下输出。
The contents of the variable names are ::Ram,Mohammed,John
The value returned by the function is Ram
The by keyword
CoffeeScript 提供范围来定义元素列表。例如,范围 [1..10] 等同于 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],其中的每个元素都会增加 1。我们还可以使用理解的 by 关键字更改此增量。
Example
以下示例演示了 CoffeeScript 提供的 for..in 理解的 by 关键字的使用。将以下代码保存在一个名叫 by_keyword_example.coffee 的文件中
array = (num for num in [1..10] by 2)
console.log array
打开 command prompt 并按照以下所示编译 .coffee 文件。
c:\> coffee -c by_keyword_example.coffee
编译后,它会给你以下 JavaScript。
// Generated by CoffeeScript 1.10.0
(function() {
var array, num;
array = (function() {
var i, results;
results = [];
for (num = i = 1; i <= 10; num = i += 2) {
results.push(num);
}
return results;
})();
console.log(array);
}).call(this);
现在,再次打开 command prompt 并按照以下所示运行 CoffeeScript 文件。
c:\> coffee by_keyword_example.coffee
执行后,CoffeeScript 文件产生以下输出。
[ 1, 3, 5, 7, 9 ]