JavaScript之练习测试(3)

来源:互联网 发布:加藤小雪相貌知乎 编辑:程序博客网 时间:2024/05/22 14:32

测试题来源:

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();        //2    myarr=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;
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 用乐秀编辑短片后两边有边框怎么办 安卓手机相机图标没有了怎么办 三星s6不充电就死机了怎么办 三星s7通话感应器不管用了怎么办 卡贴苹果8p一直跳激活怎么办? 宝宝添了小狗添过的袋子怎么办 猫咪卡在屋顶的缝隙里怎么办 大臂的图案纹小了怎么办 双面板已经贴片还要插件后焊怎么办 黑板摔在地上有木头屑怎么办 白衣服蓝袖子漂花了怎么办 白衣服泡了一夜袖子发黄怎么办 小孩的胳膊肘关节处摔断开了怎么办 生完孩子以后奶头总有脏东西怎么办 月经有黑乎乎的脏东西下不来怎么办 四季梅叶子打卷花从粉变白怎么办 新移栽的竹子出来太细怎么办 土培富贵竹长得太高了怎么办 毛竹加工厂被环保查了该怎么办? 领养姐姐家的孩子怎么办领养手续 孩子喝了点杯子变质发霉的水怎么办 杯子发霉没洗干净喝了水怎么办 小孩的咪咪头没有突出来怎么办 手被竹子刺了肿了怎么办 紫竹刚栽叶子发枯怎么办能活吗 移栽大田的水稻过施了氮肥怎么办 股骨术后六十天有小量骨痂怎么办 被桃树上的蜂蜜咬了怎么办 照片回收站密码找不回来了怎么办 扣扣空间照片回收站密码忘了怎么办 我眼睛近视了不想戴眼镜怎么办 微信聊天对方只回一个字怎么办 大学室友都不是自己喜欢的人怎么办 超轻粘土粘在衣服上怎么办 粽子昨晚煮好今日发现不够熟怎么办 5岁宝宝左眼轻微散光怎么办光 孩子总吸鼻子但没有鼻涕怎么办 纹完眼线眼睛磨的很难受怎么办 我的脸型眼睛好看牙不好看怎么办 陌陌当日打招呼人数已达上限怎么办 新生婴儿白天睡觉晚上不睡怎么办