JavaScript之练习测试(3)
2017-09-16 09:41
281 查看
测试题来源:
https://www.nowcoder.com/practice/edbc7496a36e433c89d298b9256af856?tpId=6&tqId=10951&rp=1&ru=/ta/js-assessment&qru=/ta/js-assessment/question-ranking
下文所有的运行时间和占用内存仅供参考。题目1描述
找出元素 item 在给定数组 arr 中的位置输出描述:
如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1示例1
输入
[ 1, 2, 3, 4 ], 3
输出
2
代码
function indexOf(arr, item) { for(var i=0;i<arr.length; i++){ if(arr[i]==item){ return i; } } return -1; }运行时间:157ms占用内存:14144k
题目2描述
计算给定数组 arr 中所有元素的总和输入描述:
数组中的元素均为 Number 类型示例1
输入
[ 1, 2, 3, 4 ]
输出
10
代码
function sum(arr) { var s=0; var i; for(i in arr){ s+=arr[i]; } return s; }运行时间:157ms占用内存:14400k
题目3描述
移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组示例1输入
[1, 2, 3, 4, 2], 2
输出
[1, 3, 4]
代码1
function remove(arr, item) { var i; var j=0; var myarr=new Array(); for(i in arr ){ if(arr[i]!=item){ myarr[j]=arr[i]; j++; } } return myarr; }代码2
function remove(arr, item) { var i; var myarr=new Array();for(i in arr ){ if(arr[i]!=item){ myarr.push(arr[i]); } } return myarr;}
题目4描述
移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回示例1输入
[1, 2, 2, 3, 4, 2, 2], 2
输出
[1, 3, 4]
代码
function removeWithoutCopy(arr, item) {for( var i in arr){while(arr[i]==item){arr.splice(i,1);}}return arr;}运行时间:157ms占用内存:14400k注意:在这使用while,使用if是错误的,因为splice会删除一个位置的空间,使得判断完第i个位置的数据,第i+1位置的数据会出现在第i位上,如果是if,只判断删除前的i的位置一次,原本i+1位置上的数直接略过了,导致程序出错。
题目5描述
在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组示例1输入
[1, 2, 3, 4], 10
输出
[1, 2, 3, 4, 10]代码1:
function append(arr, item) {var myarr=new Array();for(var i in arr){myarr.push(arr[i]);}myarr.push(item);return myarr;}
运行时间:194ms
占用内存:14272k代码2:
function append(arr, item) { var myarr=arr.slice(0); return myarr.concat([item]);}运行时间:154ms占用内存:14400k
题目6描述
删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组示例1输入
[1, 2, 3, 4]
输出
[1, 2, 3]
代码:
function truncate(arr) {var myarr=[];//1//myarr=arr.slice(0);// myarr.pop();//2myarr=arr.slice(0,arr.length-1);return myarr;}运行时间:152ms占用内存:14400k
题目7描述
在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组示例1输入
[1, 2, 3, 4], 10
输出
[10, 1, 2, 3, 4]错误实例代码:
function prepend(arr, item) {var myarr=[];myarr=arr;myarr.unshift(item);return myarr;}原因:myarr是引用的是arr的空间,改变了myarr,也就改变了arr,因为是同一个空间,所以出错。
针对该方法的解决方案:
该slice()方法并不会修改数组,而是返回一个子数组。-------来自w3School之js篇
function prepend(arr, item) {var myarr=[];myarr=arr.slice(0);myarr.unshift(item);return myarr;}运行时间:158ms占用内存:14404k代码2:
使用合理的原因:concat会改变现有的数组,而仅仅会返回被连接数组的一个副本。
function prepend(arr, item) {return [item].concat(arr);}运行时间:177ms占用内存:14148k更多思路:创建数组,对arr执行遍历,并赋值给myarr也是可以的。
题目8描述
删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组示例1输入
[1, 2, 3, 4]
输出
[2, 3, 4]代:1:
function curtail(arr) {var myarr=[];myarr=arr.slice(1);return myarr;}代码2:
function curtail(arr) {var myarr=[];myarr=arr.concat();myarr.shift();return myarr;}
代码3:
function curtail(arr) {var myarr=[]; myarr=arr.slice(0); myarr.shift(); return myarr;}
题目9描述
合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组示例1输入
[1, 2, 3, 4], ['a', 'b', 'c', 1]
输出
[1, 2, 3, 4, 'a', 'b', 'c', 1]
代码1:function concat(arr1, arr2) { return arr1.concat(arr2);}
代码2:function concat(arr1, arr2) { var myarr=arr1.slice(0); for(var i=0;i<arr2.length;i++){ myarr.push(arr2[i]); } return myarr;}
题目10描述
在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组示例1输入
[1, 2, 3, 4], 'z', 2
输出
[1, 2, 'z', 3, 4]代码1:function insert(arr, item, index) { return arr.slice(0,index).concat(item,arr.slice(index))}
代码2: ---------出自牛客网讨论
原理:在index位置上删除0个数据,添加一个itemfunction insert(arr, item, index) { var newArr=arr.concat(); newArr.splice(index,0,item); return newArr; }
相关文章推荐
- JavaScript 的Console log 测试小例
- JavaScript练习(三)
- javascript练习(二)
- JavaScript 测试和捕捉
- python练习,函数,内置函数,递归,程序运行顺序测试
- 2015华为机试练习【测试自动化6】城市电话号码
- JavaScript练习之全选反选练习
- 渗透测试中常用的JavaScript命令
- javascript数组去重3种方法的性能测试与比较
- JavaScript高级程序设计_1~6章的练习
- 不同浏览器基于javascript测试结果
- 慕课网javascript 进阶篇 第九章 编程练习
- WebTours测试脚本分享(半成品练习)
- javascript练习:8-1对象声明和实例化
- 很简单的javascript菜单效果,在ie6, firefox下测试通过,整理了下代码,贴出来。
- Javascript正则表达式测试网页
- Visual Studio2013的安装过程及练习测试
- 前端技能练习:javascript基础:修改this指针
- js学习之javascript引用类型object--练习模拟Map和数组去重
- JavaScript测试工具