您的位置:首页 > Web前端 > JavaScript

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个数据,添加一个item
function insert(arr, item, index) {    var newArr=arr.concat();    newArr.splice(index,0,item);    return newArr; }

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: