JS练习-牛客网-数组练习14题

1.很多人都使用过牛客网这个在线编程网站,下面是自己做的JS数组部分的练习,已通过网站和老师检查无误,分享给大家。

2.先说一下题目的位置:牛客网https://www.nowcoder.com/activity/oj→在线编程→JS能力测评经典题

                               

 3.数组部分共14题,大部分有两种解法,一种用常规循环做,一种用Array对象的方法做。

<!DOCTYPE HTML>
<html>
<head>
    <title>index</title>
    <meta charset="utf-8">
    <meta name="Author" content="Helen">
    <script>
        //共14题
        //case1:找出元素 item 在给定数组 arr 中的位置,如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1
        // 解法一:通过自定义函数来解
        function indexOf(arr, item) {
            for(var i=0;i<arr.length;i++){
                if(arr[i]===item){
                    return i;
                }
            }//end for
            return -1;
        }
        //解法二:直接通过函数方法来解
        function indexOf(arr, item) {
            return arr.indexOf(item);
        }
        //case02:计算给定数组 arr 中所有元素的总和,数组中的元素均为 Number 类型
        //方法一:用for循环常规方法做
        function sum(arr) {
            var sum=0;
            for(var i=0;i<arr.length;i++){
                sum+=arr[i];
            }
            return sum;
        }
        //方法二:用Array.reduce()方法做
        function sum(arr) {
            return arr.reduce(function(prev,cur){
                return prev+cur;
            });
        }
        //case03:移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
        //方法一:用for循环常规方法做,判断不等于item的值,将他赋给新的数组
        function remove(arr, item) {
            var newArr=[];
            for(var i=0;i<arr.length;i++){
                if(arr[i]!==item){
                    newArr[newArr.length]=arr[i];
                }
            }
            return newArr;
        }
        //方法二:用arr.filter方法做,将满足判定条件的元素返回成新的数组
        function remove(arr, item) {
            var newArr=arr.filter(function(ele){
                return ele!==item;
            });
            return newArr;
        }
        // case04 移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回
        //用indexOf和splice这两个方法来解
        function removeWithoutCopy(arr, item) {
            while(arr.indexOf(item)!==-1){ //判断数组中有没有item这个元素
                var index=arr.indexOf(item);  //有的话就通过下标删掉这个元素
                arr.splice(index,1);
            }
            return arr;
        }
        //case05: 在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
        //写法一:用for循环,先将arr的元素给newArr,注意如果直接数组赋值,newArr也是指向arr的内存,新增元素会修改arr
        function append(arr, item) {
            var newArr=[];
            for(var i=0;i<arr.length;i++){
                newArr[newArr.length]=arr[i];
            }
            newArr[newArr.length]=item;
            return newArr;
        }
        //写法二:用slice和push方法写,思路还和上面一样
        function append(arr, item) {
            var newArr=arr.slice(0,arr.length);
            newArr.push(item);
            return newArr;
        }
        //case06:删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
        // 两个写法和上个例子思路一样
        //写法一:用for循环
        function truncate(arr) {
            var newArr=[];
            for(var i=0;i<arr.length;i++){
                newArr[newArr.length]=arr[i];
            }
            newArr.length=newArr.length-1;
            return newArr;
        }
        //写法二:用slice和pop方法写
        function truncate(arr) {
            var newArr=arr.slice(0,arr.length);
            newArr.pop();
            return newArr;
        }
        //case07:在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
        //方法一:先给第一个元素赋值item,其他用for赋值
        function prepend(arr, item) {
            var newArr=[item];
            for(var i=0;i<arr.length;i++){
                newArr[newArr.length]=arr[i];
            }
            return newArr;
        }
        //方法二
        function prepend(arr, item) {
            var newArr=[item];
            for(var i=0;i<arr.length;i++){
                newArr.push(arr[i]);
            }
            return newArr;
        }
        //case08 删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组
        //方法一:直接把arr的第二个元素开始赋值给新数组
        function curtail(arr) {
            var newArr=[];
            for(var i=1;i<arr.length;i++){
                newArr[newArr.length]=arr[i];
            }
            return newArr;
        }
        //用slice实现最简单,原理同上
        function curtail(arr) {
            var newArr=arr.slice(1,arr.length);
            return newArr;
        }
        // case09:合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组
        //两个for循环,分别给newArr数组赋值
        function concat(arr1, arr2) {
            var newArr=[];
            for(var i=0;i<arr1.length;i++){
                newArr[newArr.length]=arr1[i];
            }
            for(var j=0;j<arr2.length;j++){
                newArr[newArr.length]=arr2[j];
            }
            return newArr;
        }
        //方法二:concat直接使用
        function concat(arr1, arr2) {
            var newArr=arr1.concat(arr2);
            return newArr;
        }
        //case10:在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
        // 方法一
        function insert(arr, item, index) {
            var newArr=[];
            for(var i=0;i<index;i++){
                newArr[newArr.length]=arr[i];
            }
            newArr[index]=item;
            for(var j=index;j<arr.length;j++){
                newArr[newArr.length]=arr[j];
            }
            return newArr;
        }
        //方法二
        function insert(arr, item, index) {
            var newArr=arr.slice(0,arr.length);
            newArr.splice(index,0,item);
            return newArr;
        }
        //case11:统计数组 arr 中值等于 item 的元素出现的次数
        function count(arr, item) {
            var newArr=arr.filter(function (ele){
                return ele===item;
            });
            return newArr.length;
        }
        // case12:找出数组 arr 中重复出现过的元素
        // 方法一:比较麻烦的一个方法
        function duplicates(arr) {
            var newArr=[];
            var newArr2=[];
            for(var i=0;i<arr.length;i++){
                if(newArr.indexOf(arr[i])===-1){ //判断arr中的元素是否存在于newArr中
                    newArr.push(arr[i]);          //若不存在,则把这个元素加入newArr,
                } else if(newArr2.indexOf(arr[i])===-1){ //如果这个元素存在于newArr中,那么继续判断它是否存在于newArr2
                    newArr2.push(arr[i]);           //如果不存在,则把这个元素加入newArr2,
                }
            }
            return newArr2;
        }
        //方法二:用indexOf和lastIndexOf判断是否存在相同元素,并判断这个元素是否存在于newArr中
        function duplicates(arr) {
            var newArr = [];
            arr.forEach(function (ele) {
                if (arr.indexOf(ele) !== arr.lastIndexOf(ele) && newArr.indexOf(ele) === -1) {
                    newArr.push(ele);
                }

            });
            return newArr;
        }
        //case13:为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
        function square(arr) {
            var newArr=arr.map(ele => ele*ele);
            return newArr;
        }
        //case14:在数组 arr 中,查找值与 item 相等的元素出现的所有位置(题目有误,应该是和target相等的元素)
      //方法一:
        function findAllOccurrences(arr, target) {
            var newArr=[];
            for(var i=0;i<arr.length;i++){
                if(arr[i]===target){
                    newArr[newArr.length]=i;
                }
            }
            return newArr;
        }
      //方法二:私教给的一种写法
 
         function findAllOccurrences(arr, target) {
            var newArr=[],index=arr.lastIndexOf(target); //这里必须倒序查找,倒序找到一个删除一个,再继续找,这样下标才不会变
            while(index>-1){
              newArr.push(index);
              arr.splice(index,1);
              index=arr.lastIndexOf(target)
            }
          return newArr;
        }
      
 
        //方法三--也算一种写法
        function findAllOccurrences(arr, target) {
            var newArr=[];
            arr.filter(function (ele,index) {
                if(ele===target){
                    newArr.push(index);
                }
                return newArr;
            });
            return newArr;
        }
    </script>



</head>
<body>
</body>
</html>
  

  

猜你喜欢

转载自www.cnblogs.com/Helen-code/p/11438006.html