JavaScript编程练习
1、移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回
参考代码:
function removeWithoutCopy(arr, item) {
for(var i = 0;i<arr.length;i++){
if(arr[i]==2){
arr.splice(i,1);
i--;
}
}
return arr;
}
2、移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
参考代码:
function remove(arr, item) {
var newArr = new Array();
for(var i= 0;i<arr.length;i++){
if(arr[i]!=item){
newArr.push(arr[i]);
}
}
return newArr;
}
3、计算给定数组 arr 中所有元素的总和
参考代码:
function sum(arr) {
var total = 0;
for(var i = 0;i<arr.length;i++){
if(isNaN(arr[i])){
break;
}
else{
total = total + arr[i];
}
}
return total;
}
4、找出元素 item 在给定数组 arr 中的位置
参考代码:
function indexOf(arr, item) {
if(Array.prototype.indexOf){
return arr.indexOf(item);
}else{
for(var i = 0;i<arr.length;i++){
if(arr[i]===item){
return i;
}
else
return -1;
}
}
}
5、在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
参考代码:
function append(arr, item) {
var newArr=new Array();
for(var i=0;i<arr.length;i++){
newArr.push(arr[i]);
}
newArr.push(item);
return newArr;
}
6、删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
参考代码:
解决方法一:先拷贝数组,在把数组中的最后一个数用pop方法删除
function truncate(arr) {
var newArr = new Array();
for(var i=0;i<arr.length;i++){
newArr.push(arr[i]);
}
newArr.pop();
return newArr;
}
解决方法二:不把数组中的最后一个数传入新的数组中
function truncate(arr) {
var newArr = new Array();
var len = arr.length;
for(var i=0;i<len-1;i++){
newArr.push(arr[i]);
}
return newArr;
}
7、在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
参考代码:
解决方法一:
function prepend(arr, item) {
var newArr = new Array();
for(var i = 0;i<arr.length;i++){
newArr.push(arr[i]);
}
newArr.splice(0,0,item);
return newArr;
}
解决方法二:
function prepend(arr, item) {
var a = arr.slice(0);
a.unshift([item]);
return a;
}
8、删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组
参考代码:
解决方法一:
function curtail(arr) {
var newArr = arr.slice(0);
newArr.shift();
return newArr;
}
解决方法二:
function curtail(arr) {
return arr.slice(1);
}
解决方法三:
function curtail(arr) {
var newArr = new Array();
for(var i=1;i<arr.length;i++){
newArr.push(arr[i]);
}
return newArr;
}
9、合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组
参考代码:
解决方法一:
function concat(arr1, arr2) {
return arr1.concat(arr2);
}
解决方法二:
function concat(arr1, arr2) {
var newArr = arr1.slice(0);
for(var i = 0;i<arr2.length;i++){
newArr.push(arr2[i]);
}
return newArr;
}
10、在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
参考代码:
function insert(arr, item, index) {
var newArr = arr.slice(0);
newArr.splice(index,0,item);
return newArr;
}
11、统计数组 arr 中值等于 item 的元素出现的次数
参考代码:
解决方法一:
function count(arr, item) {
var count = 0;
for(var i = 0;i<arr.length;i++){
if(arr[i]==item){
count++;
}
}
return count;
}
解决方法二:
利用filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
function count(arr, item) {
var count = arr.filter(function(a){
return a===item;
});
return count.length;
}
12、找出数组 arr 中重复出现过的元素
参考代码:
注意判断是否重复,是否已经放入容器
function duplicates(arr) {
var newArr = arr.sort(function(a,b){return a-b});
var arr1 = new Array();
for(var i = 0;i<newArr.length;i++){
//判断是否重复,是否已经放入容器
if(newArr[i]==newArr[i+1]&&newArr[i]!=newArr[i-1]){
arr1.push(arr[i]);
}
}
return arr1;
}
13、为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
参考代码:
解决方法一:
function square(arr) {
var newArr = new Array();
var squ = 0;
for(var i =0;i<arr.length;i++){
squ = arr[i]*arr[i];
newArr.push(squ);
}
return newArr;
}
解决方法二:
使用map函数:map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
语法:array.map(function(currentValue,index,arr), thisValue);
currentValue:必选,为当前元素的值,
index:可选。当前元素的索引值
arr:可选。当前元素属于的数组对象
thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 “this” 的值。
如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
function square(arr) {
return arr.map(function(e){
return e*e;
})
}
13、在数组 arr 中,查找值与 item 相等的元素出现的所有位置
参考代码:
解决方法一:
function findAllOccurrences(arr, target) {
var targetArr = new Array();
for(var i = 0;i<arr.length;i++){
if(arr[i]==target){
targetArr.push(i);
}
}
return targetArr;
}
解决方法二:
function findAllOccurrences(arr, target) {
var targetArr = new Array();
arr.filter(function(item,index){
return item===target&&targetArr.push(index);
});
return targetArr;
}
14、给定的 js 代码中存在全局变量,请修复
思路:JavaScript中变量的声明使用var,如果不适用var声明,则默认为全局变量,只需要在前相应的变量前加上 var 即可
如下代码,如果不在myObject前加var,其为全局变量,如果要避免全局变量,只需在前面加上var
function globals() {
var myObject = {
name : 'Jory'
};
return myObject;
}
15、请修复给定的 js 代码中,函数定义存在的问题
原代码:
改正后代码:
链接:https://www.nowcoder.com/questionTerminal/a5de760a7cf24c0e890eb02eed34bc02?f=discussion
来源:牛客网
这道题是考函数声明与函数表达式的区别,原题的写法,是在两个逻辑分支里面各有一个函数声明,但是对于函数声明,解析器会率先读取并且让其在执行任何代码前可用,意思就是别的代码还没运行呢,两个getValue声明已经被读取,所以总是执行最新的那个。函数表达式,当解析器执行到它所在的代码行时,才会真正被解释执行,所以两个逻辑分支可以分别执行
function functions(flag) {
var getvalue=null;
if (flag) {
getValue = function(){ return 'a'; }
} else {
getValue = function() { return 'b'; }
}
return getValue();
}
16、修改 js 代码中 parseInt 的调用方式,使之通过全部测试用例
参考代码:
function parse2Int(num) {
return parseInt(num,10);
}
parseInt() 函数可解析一个字符串,并返回一个整数。
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
当忽略参数 radix , JavaScript 默认数字的基数如下:
如果 string 以 “0x” 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
17、实现一个打点计时器,要求
(1)从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
(2)返回的对象中需要包含一个 cancel 方法,用于停止定时操作
(3)第一个数需要立即输出
function count(start, end) {
console.log(start++);
var timer = setInterval(function(){
if(start<=end){
console.log(start++);
}
else{
clearInterval(timer);
}
},100);
return {
cancel : function(){
clearInterval(timer);
}
};
}
18、实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
(1)如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
(2)如果 num 能被 3 整除,返回字符串 fizz
(3)如果 num 能被 5 整除,返回字符串 buzz
(4)如果参数为空或者不是 Number 类型,返回 false
(5)其余情况,返回参数 num
function fizzBuzz(num) {
if(num===undefined||isNaN(num)){
return false;
}
else if(num%3==0&&num%5==0){
return "fizzbuzz";
}
else if(num%3==0){
return "fizz";
}
else if(num%5==0){
return "buzz";
}
else{
return num;
}
}
推荐阅读
-
JavaScript编程练习
-
javascript学习&全选练习
-
JavaScript事件循环机制EventLoop与函数执行上下文ExcutionContext
-
Java编程实现轨迹压缩算法开放窗口实例代码
-
Java编程Webservice指定超时时间代码详解
-
详解Servlet3.0新特性(从注解配置到websocket编程)
-
Java编程实现轨迹压缩之Douglas-Peucker算法详细代码
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第20章:接口的定义与使用:课时91:代理设计模式
-
JavaScript提取行间样式,currentStye与getComputedStyle方法
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时29:数组与方法