今天写第三题:
rt:移除数组汇总的元素,但是不能修改原数组
如:
var arr = [1,2,3,4,5]; //传入5 //返回 [1,2,3,4] //console.log(arr) //返回[1,2,3,4,5]
之前说过数组的处理方法
先解题:
1.一般循环
var arr = [1,2,3,4,5]; var num = []; function removes(val){ for(let i = 0;i<arr.length;i++){ if(arr[i] != val){ num.push(arr[i]) } } console.log(num) //返回 [2,3,4,5] } removes(1)
2.forEach循环
var arr = [1,2,3,4,5]; var num = [];
//需要删除的数字 var val = 4; arr.forEach(function remove(Arrays,index) { if(Arrays != val){ num.push(Arrays) } }) console.log(num) //返回 [1,2,3,5]
3.map循环
var arr = [1,2,3,4,5]; var num = []; var val = 4; arr.map(function remove(Arrays,index) { if(Arrays != val){ num.push(Arrays) } }) //map是有返回值的,所以直接返回的话等于删除的那个数值就是undefined,与我们的结果不同 console.log(num); //返回 [1, 2, 3, 5] console.log(arr); //返回 [1, 2, 3, 4, 5]
3.reduce循环
结论个人写了demo结果是不行的,因为在判断数组中如果不等于或者等于我们的val,那么就是跳出判断,那么结果只会是一部分,跟我们的结果不同,所以,pass
4.slice函数
slice这个函数的作用就是:slice() 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。原始数组不会被修改。什么是浅拷贝呢,上demo
var arr = [1,2,23]; var arrto = arr; arrto[1] = 0; console.log(arr); //返回 [1,0,23] console.log(arrto) //返回 [1,0,23]
这就是浅拷贝,一个数组赋值给另一个数组,修改其中一个数组中的值,那么另一个数组里面的值也会跟着改变。注意,如果只是单个数值 +-运算的话,是不会修改的,这个是需要记住的。
js中也有这种浅拷贝但是不会修改原数组的方法,slice,concat和 filter
slice在截取数组的元素中作用比较大,如截取数组的前3个,Array.slice(0,3) ,返回的就是数组的前三个,原数组不会被修改。
concat在合并数组中作用比较大,还有一个字符与字符串合并,Array1.concat(Array2) 返回[Array1,Array2]
splice接受三个参数,主要作用就是操作数组的添加删除,它会修改原数组,第一个参数,从哪里开始,第二个参数,到哪里结束,第三个参数,添加什么
栗子:
var arr = [1,2,3,4,5,6]; arr.splice(0,1) //删除第一个数值 console.log(arr) //返回[2,3,4,5,6] var arr2 = [1,2,3,4,5] arr2.splice(0,0,1111)//在第一个位置添加111 console.log(arr2) //返回[1111, 1, 2, 3, 4, 5]
了解相关函数之后我们开始解题
解题:slice
var arr = [1,2,3,4,5,6]; var val = 4; //复制arr的数组到arrs var arrs = arr.slice(0) for(var i = 0;i<arrs.length;i++){ if(arrs[i] == val){ //截取i的数值,往后一位 arrs.splice(i,1);
//如果找到了,那么就不进行循环了
i--; } } console.log(arrs)//返回 [1,2,3,5]
解题:concat
var arr = [1,2,3,4,5,6]; var val = 4; var arrs = [].concat(arr); for(var i = 0; i < arrs.length; i++){ if(arrs[i] == val){ arrs.splice(i,1); i-- } } console.log(arrs) //返回[1,2,3,5,6]
解题:fifter
var arr = [1,2,3,4,5,6]; var val = 4; var a = arr.filter(function (num) { console.log(num) //返回 1,2,3,4,5,6 return num != val }) console.log(a) //返回 [1,2,3,5,6]