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>
来源:博客园
作者:Code也疯狂
链接:https://www.cnblogs.com/Helen-code/p/11438006.html