首页 > 解决方案 > Map.filter() 没有返回预期的输出

问题描述

我正在尝试 leetcode 删除元素问题。目标是从等于某个值的数组中删除所有元素。例如,如果array = [3, 2, 2, 3]val = 3输出数组应该是 [2, 2]。

我的过滤器功能似乎根据控制台日志产生了正确的输出,但在返回语句中它是完全不同的东西。

以下是我的代码的副本:

/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    let filteredNums = nums.filter(element => { 
        return element !== val
    });
    console.log(filteredNums)
    return filteredNums;
};

这是我得到的输出:

在此处输入图像描述

有没有我做错的事情我错过了?

标签: javascriptarraysfilter

解决方案


通过假设从数组中删除元素,您可以通过拼接数组来使用不同的方法。

通过使用Array#splice,您需要从数组的末尾进行迭代,因为已删除元素的索引正在更改。

最后,您需要返回数组的新长度。

/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */

var removeElement = function(nums, val) {
    let i = nums.length;
    
    while (i--) if (nums[i] === val) nums.splice(i, 1);

    return nums.length;
};

var array = [3, 2, 2, 3];

console.log(removeElement(array, 3));

console.log(array);


推荐阅读