[Easy] LeetCode JS 30 - 2724. Sort By (依據排序)

2024年3月8日

💎 加入 E+ 成長計畫 與超過 400+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

LeetCode 30 Days of JavaScript

本題來自 LeetCode 的 30 天 JacaScript 挑戰

2724. Sort By (依據排序)

題目描述

給定一個陣列 arr 和一個函式 fn,回傳一個排序後的陣列 sortedArr。可以假設 fn 只回傳數字,而這些數字決定了sortedArr 的排序順序。sortedArr 必須按照 fn 的輸出值升冪排序。

可以假設對於給定的陣列,fn 不會傳回重複的數字。

// 範例 1
輸入: arr = [5, 4, 1, 2, 3], fn = (x) => x
輸出: [1, 2, 3, 4, 5]
解釋: fn 只是傳回傳入的數字,因此陣列按升冪排序。

// 範例 2
輸入: arr = [{"x": 1}, {"x": 0}, {"x": -1}], fn = (d) => d.x
輸出: [{"x": -1} , {"x": 0}, {"x": 1}]
解釋: fn 傳回 "x" 鍵的值,因此陣列會根據該值排序。

本題解答

以下是本題的解答,詳細解題思路可以在 E+ 成長計畫看到。如果想練習更多題目,推薦可以到 GreatFrontEnd 上練習

解法一

function sortBy(arr, fn) {
  return arr.sort((a, b) => {
    const fnResultA = fn(a);
    const fnResultB = fn(b);

    // Ascending order:
    return fnResultA - fnResultB;
  });
}

解法二

function sortBy(arr, fn) {
  return arr.sort((a, b) => fn(a) - fn(b));
}
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們