zoukankan      html  css  js  c++  java
  • 牛客网前端编程:删除数组中特定元素

    对于我这个前端小白,刚开始只知道一种思路解决这个问题:

    //第一种方法
            function remove(arr, item) {
                var arr1=new Array();
                for(var i = 0;i < arr.length;i++){
                    if(arr[i]!=item){
                        arr1.push(arr[i]);
                    }
                }
                return arr1;
            }

    后来查看了一下其他人做的,发现还有其他方法,顺便学习了一下:

    //第二种方法:使用splice和slice
            //splice方法会改变原数组,所以需要将原数组转移到一个新数组
            function remove1(arr,item) {
                //使用slice方法将原数组的数据全部赋值给arr1数组
                var arr1 = arr.slice(0);
                //splice(x,y):删除从X元素开始的第Y个元素
                for(var i = 0;i<arr1.length; i++){
                    if (arr1[i]===item){
                        arr1.splice(i,1);
                        i--;
                    }
                }
                return arr1;
            }
    //第三种方法:使用arr.filter(function)方法---->只返回arr数组中与function值一致的数据
            //filter方法不会改变原数组
            function remove2(arr,item) {
                //使用filter第一种方法
                return arr.filter(function (element) {
                    return element!=item;
                })
                //使用filter第二种方法
                function a (element) {
                    return element!=item;
                }
                return arr.filter(a);
            }

    三种方法均通过测试

    以上三种方法均是在不改变原数组的情况下的方法;

    以下方法为改变原数组(不能拷贝)的方法:

    //改变数组自身的删除---这个方法超赞(参考于大神)
            function removeWithoutCopy(arr, item) {
                var n=arr.length;
                for(var i=0;i<n;i++){
                    //当数组第一个元素不等于item:先push再删掉
                    //当数组第一个元素等于item:直接删掉
                    //shift():删掉数组中第一个数据值
                    if(arr[0]!==item)
                        arr.push(arr[0]);
                    arr.shift();
    
                }
                return arr;
            }

    还有一个方法就是splice,具体参考不改变原数组的方法二

  • 相关阅读:
    Ural 1201 Which Day Is It? 题解
    Ural 1250 Sea Burial 题解
    2019 Multi-University Training Contest 2: 1010 Just Skip The Problem 自闭记
    Codeforces 718A Efim and Strange Grade 程序分析
    CentOS7 修改MySql默认端口
    Ubuntu 18.04 版本中安装mysql 8的方法
    NET_NET深入体验与实战 第一章 .NET你知道 1.1什么是 .NET
    第五课
    c# 第一节课 一些简单的应用
    MDI窗体和窗体之间的操作总结
  • 原文地址:https://www.cnblogs.com/purple-windbells/p/11244193.html
Copyright © 2011-2022 走看看