📜  CoffeeScript-范围

📅  最后修改于: 2020-10-26 05:47:48             🧑  作者: Mango


在上一章中,我们已经在CoffeeScript中看到了数组,而在编程时,我们将面对一些必须将数值序列存储在数组中的情况,如下所示。

numbers =[1,2,3,4,5,6,7,8,9,10]

CoffeeScript提供了一种较短的表示包含一系列数字值(称为range)的数组的方式。 CoffeeScript的此功能灵感来自Ruby。

句法

范围是由两个数值创建的,范围中的第一个和最后一个位置,以..或…分隔。两个点(1..4)包含范围(1、2、3、4);有三个点(1 … 4)的范围不包括结尾(1、2、3)。

下面给出的是CoffeeScript中range的语法。就像数组一样,我们将在方括号[]之间的范围内定义值。在范围内,虽然存储了一个数字序列,而不是提供整个序列的值,我们可以仅指定其开始值和结束值,并用两个点( .. )隔开,如下所示。

range =[Begin..End]

这是CoffeeScript中范围的示例。将此保存到名称为range_example.coffee的文件中。

numbers =[0..9]
console.log "The contents of the range are: "+ numbers 

打开命令提示符并编译.coffee文件,如下所示。

c:\> coffee -c ranges_example.coffee

编译时,它将为您提供以下JavaScript。在这里,您可以观察到范围被转换为完整的CoffeeScript数组。

// Generated by CoffeeScript 1.10.0
(function() {
  var numbers;

  numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

  console.log("The contents of the range are:: " + numbers);

}).call(this);

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

c:\> coffee ranges_example.coffee

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

The contents of the range are:: 0,1,2,3,4,5,6,7,8,9

不包括最终价值

范围被编译成包含所有数字的完整数组。如果要排除结束值,则必须使用三个点( )分隔范围的开始结束元素,如下所示。

range =[Begin...End]

我们可以通过排除结束值来重写上面的示例,如下所示。将以下内容保存在名为range_except_end.coffee的文件中

numbers =[0...9]
console.log "The contents of the range are:: "+ numbers 

打开命令提示符并编译.coffee文件,如下所示。

c:\> coffee -c ranges_example.coffee

编译时,它将为您提供以下JavaScript。

// Generated by CoffeeScript 1.10.0
(function() {
  var numbers;

  numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8];

  console.log("The contents of the range are:: " + numbers);

}).call(this);

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

c:\> coffee ranges_example.coffee

执行时,CoffeeScript文件将产生以下输出。在这里,您可以看到排除了最终值9

The contents of the range are:: 0,1,2,3,4,5,6,7,8 

使用带变量的范围

我们还可以通过将开始值和结束值分配给变量来定义范围。

考虑以下示例。在这里,我们使用变量定义了范围。将此代码保存在名为range_variables.coffee的文件中

start=0
end=9
numbers =[start..end]
console.log "The contents of the range are: "+ numbers

打开命令提示符并编译.coffee文件,如下所示。

c:\> coffee -c range_variables.coffee

编译时,它将为您提供以下JavaScript。

// Generated by CoffeeScript 1.10.0
(function() {
  var end, i, numbers, results, start;

  start = 0;

  end = 9;

  numbers = (function() {
    results = [];
    for (var i = start; start <= end ? i <= end : i >= end; start <= end ? i++ : i--) {
      results.push(i);
    }
    return results;
  }).apply(this);

  console.log("The contents of the range are:: " + numbers);

}).call(this);

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

c:\> coffee range_variables.coffee

执行时,CoffeeScript文件将产生以下输出。在这里,您可以看到排除了最终值9

The contents of the range are:: 0,1,2,3,4,5,6,7,8,9

数组范围

我们可以通过将数组与范围一起使用来对数组进行切片。每当我们在数组(变量)之后立即指定范围时,CoffeeScript编译器就会将其转换为JavaScript的slice()方法调用。

假设我们有一个数值为0到9的数组,那么我们可以检索它的前4个元素,如下所示。

num  = [1, 2, 3, 4, 5, 6, 7, 8, 9]
data = num[0..5]

负值表示末尾的元素,例如-1表示9。如果我们指定负数3后接两个点,则将提取数组的最后三个元素。

data = num[-3..]

如果我们仅在数组范围内将两个点指定为num [..] ,则将提取完整的数组。我们还可以使用范围如下所示将数组段替换为其他元素。

num[2..6] = [13,14,15,16,17]

下面的示例演示将范围与数组一起使用。将此代码保存在名为range_arrays.coffee的文件中

#slicing an array using ranges
num  = [1, 2, 3, 4, 5, 6, 7, 8, 9]
data = num[0..5]
console.log "The first four elements of the array : "+data


#Using negative values
data = num[-3..]
console.log "The last 3 elements of the array : "+data

#Extracting the whole array
console.log "Total elements of the array : "+num[..]


#Replacing the elements of an array
num[2..6] = [13,14,15,16,17]
console.log "New array : "+num 

打开命令提示符并编译.coffee文件,如下所示。

c:\> coffee -c range_arrays.coffee

编译时,它将为您提供以下JavaScript。在这里,您可以观察到所有范围都转换为JavaScript的slice()方法调用。

// Generated by CoffeeScript 1.10.0
(function() {
  var data, num, ref;

  num = [1, 2, 3, 4, 5, 6, 7, 8, 9];

  data = num.slice(0, 6);

  console.log("The first four elements of the array : " + data);

  data = num.slice(-3);

  console.log("The last 3 elements of the array : " + data);

  console.log("Total elements of the array : " + num.slice(0));

  [].splice.apply(num, [2, 5].concat(ref = [13, 14, 15, 16, 17])), ref;

  console.log("New array : " + num);

}).call(this); 

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

c:\> coffee range_arrays.coffee

执行时,CoffeeScript文件将产生以下输出。在这里,您可以看到排除了最终值9

The first four elements of the array : 1,2,3,4,5,6
The last 3 elements of the array : 7,8,9
Total elements of the array : 1,2,3,4,5,6,7,8,9
New array : 1,2,13,14,15,16,17,8,9

带字符串的范围

我们还可以将范围与字符串一起使用。如果我们在字符串后指定范围,则CoffeeScript会对它们进行切片并返回一个新的字符子集。

下面的示例演示将范围与字符串一起使用。在这里,我们已经创建了一个字符串并提取使用范围是从它的子字符串。将此代码保存在名为ranges_with_strings.coffee的文件中

my_string = "Welcome to tutorialspoint"
new_string = my_string[0..10]
console.log new_string

打开命令提示符并编译.coffee文件,如下所示。

c:\> coffee -c ranges_with_strings.coffee

编译时,它将为您提供以下JavaScript。

// Generated by CoffeeScript 1.10.0
(function() {
  var my_string, new_string;

  my_string = "Welcome to tutorialspoint";

  new_string = my_string.slice(0, 6);

  console.log(new_string);

}).call(this);

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

c:\> coffee ranges_with_strings.coffee

执行时,CoffeeScript文件将产生以下输出。在这里,您可以看到排除了最终值9

Welcome to

对范围的理解

作为对象和数组,我们还可以使用理解来迭代范围的元素。

以下是在范围内使用理解的示例。在这里,我们创建了一个范围,并使用理解力检索了其中的元素。将此代码保存在名为comprehensions_over_ranges.coffee的文件中

numbers =[0..9]
console.log "The elements of the range are: "
console.log num for num in numbers

打开命令提示符并编译.coffee文件,如下所示。

c:\> coffee -c comprehensions_over_ranges.coffee

编译时,它将为您提供以下JavaScript。

// Generated by CoffeeScript 1.10.0
(function() {
  var i, len, num, numbers;

  numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

  console.log("The elements of the range are: ");

  for (i = 0, len = numbers.length; i < len; i++) {
    num = numbers[i];
    console.log(num);
  }

}).call(this);

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

c:\> coffee comprehensions_over_ranges.coffee

执行时,CoffeeScript文件将产生以下输出。在这里,您可以看到排除了最终值9

The elements of the range are:
0
1
2
3
4
5
6
7
8

以同样的方式,我们也可以使用comprehensions的by关键字更改此增量。

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