# 原地删除数组元素

# 难度:简单

# 描述:

给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。

元素的顺序可以改变,并且对新的数组不会有影响。

# 样例:

给出一个数组 [0,4,4,0,0,2,4,4],和值 4

返回 4 并且 4 个元素的新数组为[0,0,0,2]

# 代码模板:

const removeElement = (arr, ele) => {}
1

# 想一想再看答案

# 想一想再看答案

# 想一想再看答案

# 代码:

  1. 保存遍历次数,匹配元素,然后删除

切勿直接使用数组的length属性,因为被删除后length属性会减少,导致遍历提前结束,删除不彻底。

const removeElement = (arr, ele) => {
	let num = arr.length // 保存遍历的次数
	for (let index = 0; index < num; index++) {
		let find = arr.indexOf(ele)
		if (find !== -1) {
			arr.splice(find, 1) // 原地删除
		} else {
			return arr.length // 找不到即退出
		}
	}
}
1
2
3
4
5
6
7
8
9
10
11
  1. 遍历数组,匹配元素,赋值为null/undefined,再过滤掉
const removeElement = (arr, ele) => {
	for (let index of arr.keys()) {
		let find = arr.indexOf(ele)
		if (find !== -1) {
			arr[find] = null
		} else {
			return arr.filter(x => x).length // 将假值过滤掉
		}
	}
}
1
2
3
4
5
6
7
8
9
10
  1. 直接过滤

在写出上个方法之后,想到可以直接过滤掉,最简洁。但还是把另外两个方法放上来,当个思路参考一下!

const removeElement = (arr, ele) => {
	return arr.filter(x => x !== ele).length // 使用过滤将值不等于ele的直接过滤出来,返回长度
}
1
2
3

# 点个Star支持我一下~