首页 > 代码库 > js数组(三)

js数组(三)

今天写第三题:

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]

 

js数组(三)