轨道
/
JavaScript
JavaScript
/
练习
/
埃莉丝的循环魔法
埃莉丝的循环魔法

埃莉丝的循环魔法

学习练习

简介

处理数组时,你有时需要对数组中的每个值执行代码。这叫做遍历数组,或者对数组进行循环。

这里我们讨论的是不需要在过程中修改数组的情况。如果要转换数组,请参见数组转换概念。

for循环

遍历数组最基本的方式是使用for循环,参见for循环概念。

const numbers = [6.0221515, 10, 23];

for (let i = 0; i < numbers.length; i++) {
  console.log(numbers[i]);
}
// => 6.0221515
// => 10
// => 23

for...of循环

如果你希望在每次迭代中直接处理值,完全不需要下标,就可以使用for...of循环。

for...of的工作方式和上面介绍的基本for循环一样,只不过你不需要把_下标_当作循环中的变量来处理,而是直接拿到_值_。

const numbers = [6.0221515, 10, 23];

// Because re-assigning number inside the loop will be very
// confusing, disallowing that via const is preferable.
for (const number of numbers) {
  console.log(number);
}
// => 6.0221515
// => 10
// => 23

和普通的for循环一样,你可以用continue结束当前这次迭代,用break彻底结束循环的执行。

forEach方法

每个数组都带有一个forEach方法,可以用来遍历数组中的元素。

forEach接受一个回调作为形参。回调函数会为数组中的每个元素调用一次。当前元素、它的下标以及整个数组都会作为实参传给回调。通常只会用到当前元素或下标。

const numbers = [6.0221515, 10, 23];

numbers.forEach((number, index) => console.log(number, index));
// => 6.0221515 0
// => 10 1
// => 23 2

一旦forEach循环开始,就无法中途停止迭代。在这个场景里不存在break和continue语句。

说明

作为一名初出茅庐的魔术师,Elyse 需要以许多不同的方式分析自己的牌组。 为了简单起见,她只用点数为 1-10 的牌。

1. 确定牌组中有多少张某种类型的牌

Elyse 想知道自己的牌组里有多少张特定类型的牌。

编写一个函数 cardTypeCheck,它接收两个形参:一个牌的数组(Elyse 的牌组)和要统计的牌的类型。

Note

该函数应使用 forEach,并返回牌组中指定类型的牌的数量。

const cardType = 3;
cardTypeCheck([1, 2, 3, 4], cardType);
// => 1

2. 确定有多少张奇数牌或偶数牌

为了表演另一个魔术,Elyse 需要知道自己的牌组里有多少张奇数牌或偶数牌。

实现一个函数 determineOddEvenCards,它接收两个形参:一个牌的数组(Elyse 的牌组)和一个布尔值(true 相当于“偶数”,false 相当于“奇数”)。

这个函数应返回一个数字:牌组中奇数牌或偶数牌的数量(取决于第二个实参的值)。

Note

为了练习,这次的函数实现请使用 for...of 循环。

determineOddEvenCards([1, 2, 3, 1, 5, 6], true);
// => 2

determineOddEvenCards([1, 2, 3, 1, 5, 6], false);
// => 4
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
JavaScript Exercism

准备好开始 埃莉丝的循环魔法 了吗?

注册 Exercism,借助 37 个概念159 个练习 和真人导师指导,学习并掌握 JavaScript,全部免费。