CoffeeScript-理解



在上一章中,我们学习了CoffeeScript提供的各种循环以及while及其变体。除此之外,CoffeeScript还提供了其他循环结构,称为comprehensions

如果我们显式添加可选的guard子句和当前数组索引的值,则这些理解将替换其他编程语言中的for循环。使用理解,我们可以迭代数组和对象,以及对数组是表达式的理解,我们可以将它们返回到函数或分配给变量。

S.No. Statement & Description
1 for..in comprehensions

The for..in comprehension is the basic form of comprehension in CoffeeScript using this we can iterate the elements of a list or array.

2 for..of comprehensions

Just like Arrays CoffeeScriptScript provides a containers to store key-value pairs known as objects. We can iterate objects using the for..of comprehensions provided by CoffeeScript.

3 list comprehensions

The list comprehensions in CoffeeScript are used to map an array of objects to another array.

综合指数

元素的列表/数组具有可用于理解的索引。您可以使用变量,如下所示在理解中使用它。

for student,i in [element1, element2, element3]

以下示例演示了在CoffeeScript理解for…的索引的用法。将此代码保存在名为for_in_index.coffee的文件中

for student,i in ['Ram', 'Mohammed', 'John']
   console.log "The name of the student with id "+i+" is: "+student 

打开命令提示符并编译.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);

现在,再次打开命令提示符,然后运行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 

后缀形式的理解

就像如果后缀,除非,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}

显示例子

分配给变量

我们用于迭代数组的理解可以分配给变量,也可以由函数返回。

考虑下面给出的例子。在这里,您可以观察到我们已经使用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() 

打开命令提示符并编译.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);

现在,再次打开命令提示符,然后运行CoffeeScript文件,如下所示。

c:\> coffee example.coffee

执行时,CoffeeScript文件将产生以下输出。

The contents of the variable names are ::Ram,Mohammed,John
The value returned by the function is Ram 

通过关键字

CoffeeScript提供了用于定义元素列表的范围。例如,范围[1..10]等于[1、2、3、4、5、6、7、8、9、10],其中每个元素都增加1。我们也可以更改此增量使用理解的by关键字。

下面的示例演示了CoffeeScript提供的for..in理解中by关键字的用法。将此代码保存在名为by_keyword_example.coffee的文件中

array = (num for num in [1..10] by 2)
console.log array

打开命令提示符并编译.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);

现在,再次打开命令提示符,然后运行CoffeeScript文件,如下所示。

c:\> coffee by_keyword_example.coffee

执行时,CoffeeScript文件将产生以下输出。

[ 1, 3, 5, 7, 9 ] 

Made with ❤️ in Chengdu. Copyright reserved 2019-2022.

蜀ICP备20006366号-1