一、问题详情:
直接删除意为原数组需要被改变,而不是得到另一个数组。
二、JavaScript实现
(一)巧用数组的push( )、shift( )方法
function del(arr,num) {
var l=arr.length;
for (var i = 0; i < l; i++) {
if (arr[0]!==num) {
arr.push(arr[0]);
}
arr.shift(arr[0]);
}
return arr;
}
var a=[3,2,3,445,3,3,3,1,3];
console.log(del(a,3));
这种方法非常巧妙,将不与特定值相等的项移到数组最后存起来,再删除当前的第一项。经过 l 次操作之后,只剩下存入数组后方的那些项。
(二)递归调用方法
function del(arr,num) {
arr.forEach(function (item,index,array) {
if (item===num) {
arr.splice(index,1);
}
});
if (arr.indexOf(num)!==-1) del(arr,num);
}
var a=[3,2,3,445,3,3,3,1,3];
del(a,3);
console.log(a);
function del(arr,num) {
for(var p in arr){
if (arr[p]===num) {
arr.splice(p,1);
}
}
if (arr.indexOf(num)!==-1) del(arr,num);
}
var a=[3,2,3,445,3,3,3,1,3];
del(a,3);
console.log(a);
以上两种方法都是采用递归的思想,第一次调用forEach或者for···in之后,并没有清除干净,因此递归调用del函数直到清除干净;