在 ES6 中,推导(Comprehension)是一种非常有用的语言特性,它可以让我们更加方便地处理数据。本文将详细介绍 ES6 中的推导,包括数组推导、对象推导和生成器推导,并提供示例代码以帮助您更好地理解和应用这些特性。
数组推导
数组推导是 ES6 中最常用的推导形式之一,它允许我们使用一种简洁的语法来创建新的数组。下面是一个简单的数组推导示例:
const numbers = [1, 2, 3, 4, 5]; const squares = [for (n of numbers) n * n]; console.log(squares); // [1, 4, 9, 16, 25]
在上面的示例中,我们使用 for..of
循环来遍历数组 numbers
中的每个元素,并使用 n * n
表达式来计算新的数组元素。最终,我们得到了一个新的数组 squares
,它包含了 numbers
数组中每个元素的平方值。
除了 for..of
循环,数组推导还支持 if
条件语句。例如,下面是一个带有条件语句的数组推导示例:
const numbers = [1, 2, 3, 4, 5]; const oddNumbers = [for (n of numbers) if (n % 2 === 1) n]; console.log(oddNumbers); // [1, 3, 5]
在上面的示例中,我们使用 if
条件语句来过滤数组 numbers
中的偶数,最终得到一个新的数组 oddNumbers
,它只包含了 numbers
数组中的奇数。
对象推导
对象推导是 ES6 中另一个常用的推导形式,它允许我们使用一种简洁的语法来创建新的对象。下面是一个简单的对象推导示例:
const person = { name: '张三', age: 18, gender: '男' }; const personInfo = {for (key of Object.keys(person)) [key, person[key]]}; console.log(personInfo); // [["name", "张三"], ["age", 18], ["gender", "男"]]
在上面的示例中,我们使用 Object.keys()
方法获取对象 person
的所有属性名,并使用 for..of
循环遍历这些属性名。然后,我们使用 [key, person[key]]
表达式来创建一个包含属性名和属性值的数组。最终,我们得到了一个新的数组 personInfo
,它包含了对象 person
的所有属性名和属性值。
除了 for..of
循环,对象推导还支持 if
条件语句。例如,下面是一个带有条件语句的对象推导示例:
const person = { name: '张三', age: 18, gender: '男' }; const personInfo = {for (key of Object.keys(person)) if (key !== 'gender') [key, person[key]]}; console.log(personInfo); // [["name", "张三"], ["age", 18]]
在上面的示例中,我们使用 if
条件语句来过滤对象 person
的属性,最终得到一个新的数组 personInfo
,它只包含了对象 person
中除了 gender
属性之外的所有属性名和属性值。
生成器推导
生成器推导是 ES6 中最强大的推导形式之一,它允许我们使用一种简洁的语法来生成一个可迭代的序列。下面是一个简单的生成器推导示例:
// javascriptcn.com 代码示例 function* fibonacci() { let [prev, curr] = [0, 1]; while (true) { [prev, curr] = [curr, prev + curr]; yield curr; } } const fib = [for (n of fibonacci()) if (n < 1000) n]; console.log(fib); // [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
在上面的示例中,我们使用 function*
关键字定义一个生成器函数 fibonacci()
,该函数可以生成斐波那契数列。然后,我们使用 for..of
循环遍历生成器函数 fibonacci()
生成的每个数值,并使用 if
条件语句来过滤出小于 1000 的数值。最终,我们得到了一个新的数组 fib
,它包含了斐波那契数列中小于 1000 的所有数值。
总结
ES6 中的推导是一种非常有用的语言特性,它可以让我们更加方便地处理数据。本文介绍了 ES6 中的三种推导形式:数组推导、对象推导和生成器推导,并提供了相应的示例代码。希望这篇文章可以帮助您更好地理解和应用 ES6 中的推导特性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/656efd2fd2f5e1655d750be6