1. 在数组 arr 中,查找值与 item 相等的元素出现的所有位置
输入:findAllOccurrences('abcdefabc'.split(''), 'a').sort()
输出:[0, 6]
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
function findAllOccurrences(arr, target) { var arr1=[]; var j=0; for(var i=0;i<arr.length;i++){ if(arr[i]==target){ arr1.push(arr.indexOf(arr[i],j)); j++; } } return arr1; }
2. 在Javascript语言中,声明变量使用的都是关键字var,如果不使用var而直接声明变量,则该变量为全局变量。
3. 请修复给定的 js 代码中,函数定义存在的问题
输入例子:
functions(true)
function functions(flag) { if (flag) { return 'a'; } return 'b'; } 测试通过!
4. 修改 js 代码中 parseInt 的调用方式,使之通过全部测试用例
大写字母A 到Z 的值是从65 到90
小写a到z 是从91 到 122
字符转ascii码:用charCodeAt();
ascii码砖字符:用fromCharCode();
知识点
parseInt(string, radix)
定义和用法
parseInt() 函数可解析一个字符串,并返回一个整数。
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
当忽略参数 radix , JavaScript 默认数字的基数如下:
如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数(十六进制转为十进制)。
如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
看例子,是要把字符串里的数字给取出来的,当字符串为十六进制ox12时,结果并不是18,而是0;
所以radix应该是有设置的,当设置了radix时,遇到非数字字符会直接忽略后面的字符。
function parse2Int(num) { return parseInt(num,10); }
5. 判断 val1 和 val2 是否完全等同 (考点为全等"===")
function identity(val1, val2) { if(val1===val2){ return true; } return false; }
6. 实现一个打点计时器,要求
1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
3、第一个数需要立即输出
ps:不是很理解
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); } }; }
console.log作用:
主要是方便你调式javascript用的。你可以看到你在页面中输出的内容。
相比alert他的优点是:
-
他能看到结构话的东西,如果是alert,淡出一个对象就是[object object],但是console能看到对象的内容。
-
console不会打断你页面的操作,如果用alert弹出来内容,那么页面就死了,但是console输出内容后你页面还可以正常操作。
-
console里面的内容非常丰富,你可以在控制台输入:console,然后就可看到:
1
|
Console {memory: MemoryInfo, debug: function , error: function , info: function , log: function …} |
它有网页的各种提示。
JavaScript中的setInterval用
setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象。可以使用本动作更新来自数据库的变量或更新时间显示。
7. 实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
2、如果 num 能被 3 整除,返回字符串 fizz
3、如果 num 能被 5 整除,返回字符串 buzz
4、如果参数为空或者不是 Number 类型,返回 false
5、其余情况,返回参数 num
输入例子:
fizzBuzz(15)
输出例子:
fizzbuzz
function fizzBuzz(num) { if(num%3==0){ if(num%5==0){ return "fizzbuzz"; } return "fizz"; }else if(num%5==0){ return "buzz"; }else{ if(typeof(num)!="number"){ return false; }else{ return num; } } }
8. 将数组 arr 中的元素作为调用函数 fn 的参数
输入例子:
argsAsArray(function (greeting, name, punctuation) {return greeting + ', ' + name + (punctuation || '!');}, ['Hello', 'Ellie', '!'])
输出例子:
Hello, Ellie!
function argsAsArray(fn, arr) { return fn.apply(this,arr); }
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
9. 删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
pop() 方法用于删除并返回数组的最后一个元素。
function truncate(arr) { var arr2=new Array(); for(var i=0;i<arr.length-1;i++){ arr2.push(arr[i]); } return arr2; }
10. 在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
输入例子:
prepend([1, 2, 3, 4], 10)
输出例子:
[10, 1, 2, 3, 4]
function prepend(arr, item) { var arr2=new Array(); arr2.push(item); for(var i=0;i<arr.length;i++){ arr2.push(arr[i]); } return arr2; }
11. 合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组
输入例子:
concat([1, 2, 3, 4], ['a', 'b', 'c', 1])
输出例子:
[1, 2, 3, 4, 'a', 'b', 'c', 1]
function concat(arr1, arr2) { var arr=new Array(); for(var i=0;i<arr1.length;i++){ arr.push(arr1[i]); } for(var i=0;i<arr2.length;i++){ arr.push(arr2[i]); } return arr; }
12. 在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
输入例子:
insert([1, 2, 3, 4], 'z', 2)
输出例子:
[1, 2, 'z', 3, 4]
function insert(arr, item, index) { var arr1=new Array(); for(var i=0;i<arr.length;i++){ arr1.push(arr[i]); if(index-1==i){ arr1.push(item); } } return arr1; }
13. 统计数组 arr 中值等于 item 的元素出现的次数
输入例子:
count([1, 2, 4, 4, 3, 4, 3], 4)
输出例子:
3
function count(arr, item) { var x=0; for(var i=0;i<arr.length;i++){ if(arr[i]==item){ x++; } } return x; }
14. 找出数组 arr 中重复出现过的元素
输入例子:
duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]).sort()
输出例子:
[1, 3, 4]
ps:这题答案我居然完全看不懂。。。。。
function duplicates(arr) { var arr2=[]; var obj={}; for(var i=0,len=arr.length;i<len;i++){ if(!obj[arr[i]]){ obj[arr[i]]=1; }else{ obj[arr[i]]++; if(obj[arr[i]]==2){ arr2.push(arr[i]); } } } return arr2; }
这个方法好懂一些,好6
function duplicates(arr) { var result=[]; arr.forEach(function(elem){ if(arr.indexOf(elem)!=arr.lastIndexOf(elem)&&result.indexOf(elem)==-1){ result.push(elem); } }); return result; }
sort() 方法用于对数组的元素进行排序。
发现一个厉害的答题方法:http://blog.csdn.net/u014787301/article/details/52206260
15. 为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
输入例子:
square([1, 2, 3, 4])
输出例子:
[1, 4, 9, 16]
function duplicates(arr) { var arr2=[]; var obj={}; for(var i=0,len=arr.length;i<len;i++){ if(!obj[arr[i]]){ obj[arr[i]]=1; }else{ obj[arr[i]]++; if(obj[arr[i]]==2){ arr2.push(arr[i]); } } } return arr2; }
16. 计算给定数组 arr 中所有元素的总和
输入描述:
数组中的元素均为 Number 类型
输入例子:
sum([ 1, 2, 3, 4 ])
输出例子:
10
ps这个参考的方法啦,用时179s
function sum(arr) { var su=0; arr.forEach(function(value,index,arr){ su+=value; }); return su; }
呜呼,我的要233s,弱爆了。。。。。
function sum(arr) { var su=0; for(var i=0;i<arr.length;i++){ su=arr[i]+su; } return su; }
17. 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
输入例子:
remove([1, 2, 3, 4, 2], 2)
输出例子:
[1, 3, 4]
ps:这个方法,反正我是想不出来的
function remove(arr, item) { return arr.filter(function(d){ return d !== item; }) }
18. 移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回
输入例子:
removeWithoutCopy([1, 2, 2, 3, 4, 2, 2], 2)
输出例子:
[1, 3, 4]
function removeWithoutCopy(arr, item) { for(var i=0;i<arr.length;i++){ if(arr[i]==item){ arr.splice(i,1); i--; } } return arr; }
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
注释:该方法会改变原始数组。
19. 在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
输入例子:
append([1, 2, 3, 4], 10)
输出例子:
[1, 2, 3, 4, 10]
function append(arr, item) { return [].concat(arr,item); }
20. 将函数 fn 的执行上下文改为 obj 对象
输入例子:
speak(function () {return this.greeting + ', ' + this.name + '!!!';}, {greeting: 'Hello', name: 'Rebecca'})
输出例子:
Hello, Rebecca!!!
function speak(fn, obj) { return fn.call(obj); }