0
点赞
收藏
分享

微信扫一扫

js删除数组内相同元素(同时删除多个元素)

seuleyang 2022-01-31 阅读 108

例:有数组testArr= ["b", "b", "a", "b", "a"],需要把数组内的"b"删掉。

错误的写法:

<script>
	var testArr = ["b", "b", "a", "b", "a"];
	//替换掉数组里的b
	for (var i = 0; i < testArr.length; i++) {
		//如果是b,则从数组删掉
		if (testArr[i] == "b")
			testArr.splice(i, 1)
	}
	console.log(testArr);//testArr为 ["b","a","a"];
</script>

/*错误原因:在i=0时删掉了第一个"b", testArr变成了["b","a","b","a"];
  继续走循环,i=1时 testArr length为4,testArr[1]已经不是最初的testArr[1]了
  所以漏掉了第二个"b".*/

解决方法:

1. 使用i--,初始值为length-1,这样删除为数组最后开始删除(或通过验证),不影响继续执行的结果。

<script>
	var testArr = ["b", "b", "a", "b", "a"];
	//替换掉数组里的b
	for (var i =0; i < testArr.length; i++) {
		//如果是b,则从数组删掉
		if (testArr[i] === "b"){
			testArr.splice(i, 1)
			//因为当前元素被删,后边的元素全部往前挪1个位置,i-1保证不漏掉数据
			i-=1;
		}
	}
	console.log(testArr);// testArr=["a","a"]
</script>

2.每次成功执行删除,则把当前的i减1。因为每删除一个元素,后边的依次靠前一个位置。所以把i-1可保证每个元素都不漏掉。

<script>
	var testArr = ["b", "b", "a", "b", "a"];
	//替换掉数组里的b
	for (var i =0; i < testArr.length; i++) {
		//如果是b,则从数组删掉
		if (testArr[i] === "b"){
			testArr.splice(i, 1)
			//因为当前元素被删,后边的元素全部往前挪1个位置,i-1保证不漏掉数据
			i-=1;
		}
	}
	console.log(testArr);// testArr=["a","a"]
</script>

3. 使用一个新的数组存放筛选的值。

<script>
	var testArr = ["b", "b", "a", "b", "a"];
	var newArr = [];
	for (var i = 0; i < testArr.length; i++) {
		if (testArr[i] !== "b") {
			newArr.push(testArr[i]);
		}
	}
	console.log(newArr);//["a","a"]
</script>

该方法还可以Array.prototype.filter(ES5支持)实现

<script>
	var testArr = ["b", "b", "a", "b", "a"];
	var newArr = testArr.filter(function(item){
		  return item != "b";
		});
	console.log(newArr);//newArr=["a","a"]
</script>
举报

相关推荐

0 条评论