學習軌道
/
JavaScript
JavaScript
/
練習
/
Elyse 的分析魔法
Elyse 的分析魔法

Elyse 的分析魔法

學習練習

簡介

箭頭函式

除了函式宣告和函式運算式之外,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

準備好開始 Elyse 的分析魔法 了嗎?

註冊 Exercism,透過 37 個概念159 個練習 和真人引導來學習並精通 JavaScript,全部免費。