js(110)~[27] 移除元素?

54 阅读2分钟

27. 移除元素

image.png 这道题,说实话我还真不理解,可能我真的是太菜逼了,这一段时间刷题不多,关于每道题都希望能够彻底理解,有的好理解的我都不写记录了,但是这道题我看了答案各种题解各种讲解之后还是不理解.结合我限免写的错误代码来分析.

// ---- 这是错误的
var removeElement = function(nums, val) { 
    nums = nums.filter(v => v !== val);
    console.log(nums)
    return nums.length;
};

通过题目来分析,移除等于val的值,并且返回新数组的长度,我自己想了想写出来上面的代码,最后执行都结果不对,我的思路是nums过滤重新复制,然后输出他的长度,最后执行结果跟我想的不一样啊,首先我返回的是nums.length应该是是一个数字,但是是数组.可是我console出来的nums确实是想要的结果!然后题目中还特别说明了,但是我依然不懂,看了题解好像大家都知道都没有人说这一点儿啊.
然后我自己反思,第一就是nums为啥输出的还是跟输入的一样,是不是我nums=赋值相当于弄了一个新的数组? 而后面输出的数组长度,最后输出的是数组,是不是人家内部截取了需要的前几个?
题目确实看不明白,但是题解还是能看懂的,贴出一个双指针的解法如下\

// --- 正确 提交通过
/**
这个inx相当于需要返回数组的长度,也算是过滤掉等于val剩下的数组元素
解题思路 相当于重写当前nums的值把符合要求的从第一个开始重写,
**/
var removeElement = function (nums, val) {
	let inx = 0;
	for (let i = 0; i < nums.length; i++) {
		if (nums[i] !== val) {
			nums[inx] = nums[i];
			inx++;
		}
	}
	return inx;
};

参考链接 programmercarl.com/0027.%E7%A7…