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

匿名 (未验证) 提交于 2019-12-02 23:56:01

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>   

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!