[Easy] 手写 dropRightWhile

2024年1月28日

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

题目描述

Lodash 的 dropRightWhile 是开发中经常被用的效用函式,也经常会在面试被问到。 dropRightWhile 会从数组的末端开始,移除符合指定条件的元素,直到遇到不符合条件的元素为止,并回传剩余的元素所组成的新数组。同时确保原始数组保持不变

dropRightWhile(
  ["hello", "world", "today", "isGood"],
  (value) => value.length > 5
); // =>  ['hello', 'world', 'today']
dropRightWhile(
  [
    { name: "Alice", age: 25 },
    { name: "Charlie", age: 20 },
    { name: "Bob", age: 30 },
  ],
  (obj) => obj.age > 25
); // => [{ name: 'Alice', age: 25 }, { name: 'Charlie', age: 20 }]
dropRightWhile([10, 20, 30, 40, 50, 10], (value) => value !== 10); // => [10, 20, 30, 40, 50, 10]
dropRightWhile([1], (value) => value > 0); // => []

本题解答

以下是本题的解答,详细解题思路可以在 E+ 成长计划看到。如果想练习更多题目,推荐可以到 GreatFrontEnd 上练习。

解法一

function dropRightWhile(array, predicate) {
  let index = array.length - 1;

  while (index >= 0 && predicate(array[index], index, array)) {
    index--;
  }

  return array.slice(0, index + 1);
}

解法二

function dropRightWhile(array, predicate) {
  for (let i = array.length - 1; i >= 0; i--) {
    if (!predicate(array[i], i, array)) {
      return array.slice(0, i + 1); // Return as soon as predicate is false
    }
  }
  return []; // If all elements meet the predicate, return an empty array
}
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們