[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
}