我正在尝试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;
};下面是输出的内容:

有什么事情我做错了,我错过了吗?
发布于 2020-11-14 19:32:36
通过假设从数组中删除元素,可以通过拼接数组使用不同的方法。
通过使用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);
发布于 2020-11-14 20:47:04
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));免责声明:
发布于 2020-11-14 19:18:38
好吧,它的工作原理是:
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 并没有改变传入的数组,而是返回原始数组的副本,而没有过滤掉元素。
https://stackoverflow.com/questions/64837631
复制相似问题