zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    OpenCV2:总结篇 PS算法实现
    DirectX9:第四部分 顶点着色器
    DirectX9:基础篇 第一章 初始化Direct3D
    OpenCV2:高中篇 图像锐化技术-边缘检测算子
    他山之石:C++书籍推荐
    C89:论回调函数
    OpenCV2:幼儿园篇 第六章 图像转换
    四维空间引发-维度空间(0-10)来自我的教授的班长
    802.11全家
    提示窗UIAlertView与UIAlertController的用法(持续更新中)
  • 原文地址:https://www.cnblogs.com/damai/p/7329322.html
Copyright © 2011-2022 走看看