JS能力测评经典题11-20

11.计数

统计数组 arr 中值等于 item 的元素出现的次数

示例1

输入

1
[1, 2, 4, 4, 3, 4, 3], 4

输出

1
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//常规
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) {
return arr.filter(function(a){
return (a==item);
}).length;
}

12.查找重复元素

找出数组 arr 中重复出现过的元素

示例1

输入

1
[1, 2, 4, 4, 3, 3, 1, 5, 3]

输出

1
[1, 3, 4]

我写的

1
2
3
4
5
6
7
8
9
10
11
function duplicates(arr) {
var a=[];
for(var i=0;i<arr.length/2;i++){
for(var j=i+1;j<arr.length;j++){
if((arr[i]==arr[j])&&(a.indexOf(arr[i])==-1)){
a.push(arr[i]);
}
}
}
return a;
}

讨论区:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function duplicates(arr) {
     //声明两个数组,a数组用来存放结果,b数组用来存放arr中每个元素的个数
     var a = [],b = [];
     //遍历arr,如果以arr中元素为下标的的b元素已存在,则该b元素加1,否则设置为1
     for(var i = 0; i < arr.length; i++){
         if(b[arr[i]]){
b[arr[i]]++;
}else{
b[arr[i]]=1;
}
     }
     //遍历b数组,将其中元素值大于1的元素下标存入a数组中
     for(var i = 0; i < b.length; i++){
         if(b[i] > 1){
             a.push(i);
         }
     }
     return a;
 }
 //解决数组中某一数值过大,导致数组浪费问题,可以使用对象
 function duplicates(arr) {
var obj = {};
var repeatList = [];
//遍历数组,将数组的值作为obj的索引,出现次数为值
arr.forEach(function(item){
if(obj[item]){
obj[item] +=1;
}else{
obj[item] = 1;
}
});
//获取对象自身属性
var propertyNames = Object.getOwnPropertyNames(obj);
//遍历对象,将重复出现的元素取出
propertyNames.forEach(function(item){
if(obj[item] > 1){
repeatList.push(parseInt(item));
}
});
return repeatList;
}
//方法3
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;
}

13.求二次方

为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组

示例1

输入

1
[1, 2, 3, 4]

输出

1
[1, 4, 9, 16]

我写的:

1
2
3
4
5
6
7
function square(arr) {
var a=[];
arr.forEach(function(item,index,arr){
a.push(item*item);
})
return a;
}
1
2
3
4
5
6
//map会返回数组,forEach不会
function square(arr) {
return arr.map(function(item,index,arr){
return item*item;
});
}

14.查找元素位置

在数组 arr 中,查找值与 item 相等的元素出现的所有位置

示例1

输入

1
'abcdefabc'

输出

1
[0, 6]
1
2
3
4
5
6
7
8
9
function findAllOccurrences(arr, target) {
var a=[];
for(var i=0;i<arr.length;i++){
if(arr[i]==target){
a.push(i);
}
}
return a;
}

15.避免全局变量

给定的 js 代码中存在全局变量,请修复

1
2
3
4
5
6
7
function globals() {
var myObject = {
name : 'Jory'
};

return myObject;
}

16.正确的函数定义

请修复给定的 js 代码中,函数定义存在的问题

示例1

输入

1
true

输出

1
a

题目:

1
2
3
4
5
6
7
8
9
function functions(flag) {
if (flag) {
function getValue() { return 'a'; }
} else {
function getValue() { return 'b'; }
}

return getValue();
}

修改后:

1
2
3
4
5
6
7
8
function functions(flag) {
    if (flag) {
      var getValue = function () { return 'a'; }
    } else {
      var getValue = function () { return 'b'; }
    }
    return getValue();
}

17.正确地使用praseInt

修改 js 代码中 parseInt 的调用方式,使之通过全部测试用例

示例1

输入

1
'12'

输出

1
12

示例2

输入

1
'12px'

输出

1
12

示例3

输入

1
'0x12'

输出

1
0
1
2
3
function parse2Int(num) {
return parseInt(num,10);
}

18.完全等同

判断 val1 和 val2 是否完全等同

1
2
3
function identity(val1, val2) {
return val1===val2;
}

19.计时器

实现一个打点计时器,要求
1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
3、第一个数需要立即输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function count(start, end) {
  //立即输出第一个值,记得第一个值要加上1
  console.log(start++);
     var timer = setInterval(function(){
         if(start <= end){
             console.log(start++);
         }else{
             clearInterval(timer);
         }
     },100);
    //返回一个对象,其中cancel是对象的一个属性
     return {
         cancel : function(){
             clearInterval(timer);
         }
     };
 }

20.流程控制

实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
2、如果 num 能被 3 整除,返回字符串 fizz
3、如果 num 能被 5 整除,返回字符串 buzz
4、如果参数为空或者不是 Number 类型,返回 false
5、其余情况,返回参数 num

示例1

输入

1
15

输出

1
fizzbuzz
1
2
3
4
5
6
7
8
9
10
11
12
13
function fizzBuzz(num) {
if(num%3==0&&num%5==0){
return "fizzbuzz";
}else if(num%3==0){
return "fizz";
}else if(num%5==0){
return "buzz";
}else if(num===null|| typeof num != "number"){
return false;
}else{
return num;
}
}