轨道
/
JavaScript
JavaScript
/
练习
/
埃莉丝的分析魔法
埃莉丝的分析魔法

埃莉丝的分析魔法

学习练习

简介

箭头函数

除了函数声明和函数表达式,JavaScript 还有一种非常简洁的定义函数的语法。这类函数叫做_箭头函数_。

下面是函数声明和箭头函数的一个对比。

function addUpTwoNumbers(num1, num2) {
  return num1 + num2;
}
// function keyword removed and => added
const addUpTwoNumbers = (num1, num2) => {
  return num1 + num2;
};

如果函数体里只包含一条 return 语句,就像上面的例子那样,那么 {} 和 return 关键字都可以省略。 如果只有一个形参,括号 () 也可以省略。

const addUpTwoNumbers = (num1, num2) => num1 + num2;
const square = num => num * num;

箭头函数常常用来在函数调用中直接定义简短的回调函数。

applyToSquare(number => number * number);

数组分析

数组内置了一些方法,可以用来分析数组的内容。 这些方法大多接受一个返回 true 或 false 的函数作为实参。 这样的函数称为 predicate。

这些内置方法的用途是_代替 for 循环_或内置的 forEach 方法:

使用 for 循环进行分析的例子:

const numbers = [1, 'two', 3, 'four'];
for (var i = 0; i < numbers.length; i++) {
  if (numbers[i] === 'two') {
    return i;
  }
}
// => 1

使用内置方法进行分析的例子:

const numbers = [1, 'two', 3, 'four'];
numbers.indexOf('two');
// => 1

下面列出了其他一些可用于分析数组的内置方法。 完整的数组方法列表请见 MDN。

includes

includes(value) 方法判断数组中是否包含某个值。 包含该值时返回 true,否则返回 false。

const numbers = [1, 'two', 3, 'four'];
numbers.includes(1);
// => true
numbers.includes('one');
// => false

every

every(predicate) 方法接受一个函数,这个函数就是_一个 predicate_。 它会检查数组中的每个元素传入该 predicate 后是否都返回 true。 换句话说,这个方法测试的是:数组中的所有元素都通过了函数调用所传入的测试。 当每个元素都通过 predicate 测试时返回 true,否则返回 false。

const numbers = [1, 3, 5, 7, 9];
numbers.every((num) => num % 2 !== 0);
// => true

some

some(predicate) 方法与 every 方法相同,但只要数组中至少有一个元素通过了 predicate 测试,就返回 true。

const numbers = [1, 3, 5, 7, 9];
numbers.some((num) => num % 2 !== 0);
// => true

find

find(predicate) 方法返回数组中第一个通过 predicate 测试的元素的值。 some() 在通过测试时返回 true,而 find() 返回数组中实际的那个值。 如果数组里没有任何元素通过 predicate 测试,该方法返回 undefined。

const numbers = [1, 3, 5, 7, 9];
numbers.find((num) => num < 5);
// => 1

findIndex

findIndex(predicate) 与 find() 方法相同,但它返回通过 predicate 测试的元素的(第一个)下标,而不是 value。 如果数组里没有任何元素通过 predicate 测试,该方法返回 -1。

const numbers = [1, 3, 5, 7, 9];
numbers.findIndex((num) => num > 7);
// => 4
numbers.findIndex((num) => num > 9);
// => -1

说明

准魔术师 Elyse 继续她的训练。她会拿到好几叠牌,用来完成她的魔术。 为了让事情简单一些,她只用 1 到 10 这些牌。

在这个练习中,使用内置方法来分析数组的内容。

1. 找出某张牌的位置

Elyse 想知道某张牌在牌堆中的位置(下标)。

const card = 2;
getCardPosition([9, 7, 3, 2], card);
// => 3

2. 判断某张牌是否存在

Elyse 想判断某张牌是否在牌堆中,换句话说,牌堆中是否包含某个特定的number。

const card = 3;
doesStackIncludeCard([2, 3, 4, 5], card);
// => true

3. 判断每张牌是否都是偶数

Elyse 想知道是否每张牌都是偶数,换句话说,牌堆中的每个number是否都是偶数。

isEachCardEven([2, 4, 6, 7]);
// => false

4. 检查牌堆中是否有奇数牌

Elyse 想知道牌堆中是否有奇数。

doesStackIncludeOddCard([3, 2, 6, 4, 8]);
// => true

5. 获取牌堆中第一张奇数牌

Elyse 想知道第一张奇数牌的值。

getFirstOddCard([4, 2, 8, 7, 9]);
// => 7

6. 找出第一张偶数牌的位置

Elyse 想知道第一张偶数牌的位置。

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

准备好开始 埃莉丝的分析魔法 了吗?

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