首页 > 解决方案 > 如何仅过滤数组中的 1 个匹配元素

问题描述

我有 2 个苹果。过滤方法删除所有苹果。有没有办法只删除其中一个。

var box = ['banana', 'apple', 'apple']

我期待的输出:

box.filter((a) => a !== 'apple') => ['banana', 'apple']

标签: javascriptarrays

解决方案


没有内置的,没有。你可以记住你是否看过它并总是在true之后返回:

const box = ["banana", "apple", "apple"];

let seenApple = false;
const filtered = box.filter((a) => {
    if (seenApple) {
        return true;
    }
    seenApple = a === "apple";
    return !seenApple;
});

console.log(filtered);

或者,您可以找到第一个的索引apple

const appleIndex = box.findIndex(a => a === "apple");

...然后filter通过该索引:

const filtered = box.filter((entry, index) => index !== appleIndex);

...或用于splice就地修改数组。


推荐阅读