首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Map.filter()不返回预期输出

Map.filter()不返回预期输出
EN

Stack Overflow用户
提问于 2020-11-14 19:11:47
回答 3查看 115关注 0票数 1

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

我的过滤器函数似乎是基于控制台日志生成正确的输出,但在返回语句中则完全不同。

下面是我的代码副本:

代码语言:javascript
运行
复制
/**
 * @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;
};

下面是输出的内容:

有什么事情我做错了,我错过了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-14 19:32:36

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

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

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

代码语言:javascript
运行
复制
/**
 * @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);

票数 2
EN

Stack Overflow用户

发布于 2020-11-14 20:47:04

  • 我们也可以在不使用内置函数的情况下解决问题,特别是对于一些有些重要的LeetCode问题(对于面试,而不是竞赛):

代码语言:javascript
运行
复制
const removeElement = function(nums, val) {
    let lo = 0;
    let hi = nums.length - 1;
    while (lo <= hi) {
        if (nums[lo] === val) {
            swap(nums, lo, hi);
            hi -= 1;
        } else {
            lo += 1;
        }
    }

    return lo;
};

const swap = function(nums, left, right) {
    const temp = nums[left];
    nums[left] = nums[right];
    nums[right] = temp;
    return nums;
};

// console.log(removeElement(nums = [3,2,2,3], val = 3));

免责声明:

  • 不太了解JavaScript;
票数 1
EN

Stack Overflow用户

发布于 2020-11-14 19:18:38

好吧,它的工作原理是:

代码语言:javascript
运行
复制
const removeElement = function(nums, val) {
    let filteredNums = nums.filter(element => { 
        return element !== val
    });
    console.log("From inside of the function:", filteredNums)
    return filteredNums;
};


const exampleArray = [3, 2, 2, 3];
const element = 3;

console.log("Original array before:", exampleArray)
const result = removeElement(exampleArray, element);
console.log("Returning array:", result);
console.log("Original array after:", exampleArray)

有一件事可能会让您感到意外,那就是filteredNums 并没有改变传入的数组,而是返回原始数组的副本,而没有过滤掉元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64837631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档