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

例:有数组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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值