1 如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1

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;
      }
    }
  }
  return -1;
}

2 计算给定数组 arr 中所有元素的总和

递归:

function sum(arr) {
    var len = arr.length;
    if(len == 0){
        return 0;
    } else if (len == 1){
        return arr[0];
    } else {
        return arr[0] + sum(arr.slice(1));
    }
}

常规循环:

function sum(arr) {
    var s = 0;
    for (var i=arr.length-1; i>=0; i--) {
        s += arr[i];
    }
    return s;
}

函数式编程 map-reduce:

function sum(arr) {
    return arr.reduce(function(prev, curr, idx, arr){
        return prev + curr;
    });
}

forEach遍历:

function sum(arr) {
    var s = 0;
    arr.forEach(function(val, idx, arr) {
        s += val;
    }, 0);
  
    return s;
};

eval:

function sum(arr) {
  return eval(arr.join("+"));
}

 3 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组

function remove(arr, item) {
  var arr1 = arr.slice(0);
  for(var i=arr1.length-1;i>=0;i--){
    if(arr1[i]==item){
      arr1.splice(i, 1);
    }
  }
  return arr1;
}

function remove(arr, item) {
  var arr1 = arr.slice(0);
  for(var i=0; i<arr1.length;i++){
    if(arr1[i]==item){
      arr1.splice(i, 1);
      i--;
    }
  }
  return arr1;
}

function remove(arr, item) {
  var arr1 = [];
  for(var i=0; i<arr.length;i++){
    if(arr[i]!==item){
      arr1.push(arr[i]);
    }
  }
  return arr1;
}

function remove(arr,item){
    return arr.filter(function(ele){
         return ele != item;
    })
}

4 在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组

function(arr, item) {
    var length = arr.length,
        newArr = [];
    for (var i = 0; i < length; i++) {
        newArr.push(arr[i]);
    }
    newArr.push(item);
    return newArr;
};

var append2 = function(arr, item) {
    var newArr = arr.slice(0);  // slice(start, end)浅拷贝数组
    newArr.push(item);
    return newArr;
};

var append3 = function(arr, item) {
  return arr.concat(item);
}

function append(arr, item) {
    var newArr=arr.join().split(',');
    newArr.push(item);
    return newArr;
}

5 删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组

//利用slice
function truncate(arr) {
  return arr.slice(0,-1);
}

function truncate(arr) {
  var arr1 = arr.slice(0);
  arr1.pop();
  return arr1;
}

function truncate(arr) {

var newArr=[];
    [].push.apply(newArr, arr);
    newArr.pop();
    return newArr;
}

function truncate(arr) {

  return arr.filter(function(v,i,ar) {

return i!==ar.length-1;
    });
}

function truncate(arr) {
    var newArr = arr.join().split(',');
    newArr.pop();
    return newArr;
}

function truncate(arr) {
  var newArr = arr.concat();
  newArr.pop();
  return newArr;
}

function truncate(arr, item) {
    var newArr=[];
    for(var i=0;i<arr.length-1;i++){
        newArr.push(arr[i]);
    }
    return newArr;
}

//使用push.apply

function prepend(arr, item) {
    var newArr=[item];
    [].push.apply(newArr, arr);
    return newArr;
}

//利用slice+unshift/splice
function prepend(arr, item) {
    var newArr=arr.slice(0);
    newArr.unshift(item);//newArr.splice(0,0,item);
    return newArr;
}

//使用join+split+unshift/splice组合
function prepend(arr, item) {
    var newArr=arr.join().split(',');
    newArr.unshift(item);//newArr.splice(0,0,item);
    return newArr;
}

//使用join+split+unshift/splice组合
function prepend(arr, item) {
    var newArr=arr.join().split(',');
    newArr.unshift(item);//newArr.splice(0,0,item);
    return newArr;
}

6 删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组

//利用slice

function curtail(arr) {
  return arr.slice(1);
}

//利用filter
function curtail(arr) {
    return arr.filter(function(v,i) {
        return i!==0;
    });
}

//利用push.apply+shift
function curtail(arr) {
    var newArr=[];
    [].push.apply(newArr, arr);
    newArr.shift();
    return newArr;
}

//利用join+split+shift    注意!!!:数据类型会变成字符型
function curtail(arr) {
    var newArr = arr.join().split(',');
    newArr.shift();
    return newArr;
}

//利用concat+shift
function curtail(arr) {
    var newArr = arr.concat();
    newArr.shift();
    return newArr;
}
//普通的迭代拷贝
function curtail(arr) {
    var newArr=[];
    for(var i=1;i<arr.length;i++){
        newArr.push(arr[i]);
    }
    return newArr;
}

7 合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组

//利用concat
function concat(arr1, arr2) {
    return arr1.concat(arr2);
}
//利用slice+push.apply
function concat(arr1, arr2) {
    var newArr=arr1.slice(0);
    [].push.apply(newArr, arr2);
    return newArr;
}
//利用slice+push
function concat(arr1, arr2) {
    var newArr=arr1.slice(0);
    for(var i=0;i<arr2.length;i++){
        newArr.push(arr2[i]);
    }
    return newArr;
}
//普通的迭代拷贝
function concat(arr1, arr2) {
    var newArr=[];
    for(var i=0;i<arr1.length;i++){
        newArr.push(arr1[i]);
    }
    for(var j=0;j<arr2.length;j++){
        newArr.push(arr2[j]);
    }
    return newArr;
}

8 在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组

//利用slice+concat
function insert(arr, item, index) {
    return arr.slice(0,index).concat(item,arr.slice(index));
}
//利用concat +splice
function insert(arr, item, index) {
    var newArr=arr.concat();
    newArr.splice(index,0,item);
    return newArr;
}
//利用slice+splice
function insert(arr, item, index) {
    var newArr=arr.slice(0);
    newArr.splice(index,0,item);
    return newArr;
}
//利用push.apply+splice
function insert(arr, item, index) {
    var newArr=[];
    [].push.apply(newArr, arr);
    newArr.splice(index,0,item);
    return newArr;
}
//普通的迭代拷贝
function insert(arr, item, index) {
    var newArr=[];
    for(var i=0;i<arr.length;i++){
        newArr.push(arr[i]);
    }
    newArr.splice(index,0,item);
    return newArr;
}

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

//filter()-->利用指定的函数确定是否在返回的数组中包含某一项
        function count(arr, item) {
            var count = arr.filter(function(a) {
                return a === item;   //返回true的项组成的数组
            });
            return count.length;
        }
        //map()-->对数组中的每一项进行给定函数,
        //返回每次函数条用的结果组成的数组;
        function count(arr, item) {
            var count = 0;
            arr.map(function(a) {
                if(a === item) {
                    count++;
                }
            });
            return count;
        }
        //for循环
        function count(arr, item) {
            var count = 0;
            for(var i=0; i<arr.length; i++) {
                if(arr[i] === item) {
                    count++;
                }
            }
            return count;
        }
        //reduce()-->从数组的第一项开始,逐个遍历到最后;
        function count(arr, item) {
            var count = arr.reduce(function(prev, curr) {
                return curr === item ? prev+1 : prev;
            }, 0);
            return count;
        }
                //forEach()-->对数组中的每一项运行传入的函数
        function count(arr, item) {
            var count = 0;
            arr.forEach(function(a) {
                a === item ? count++ : 0;
            });
            return count;
        }

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

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;
}

function duplicates(arr) {
    var a=arr.sort(),b=[];
    for(var i in a){
        if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]); 
    }
    return b;
}//先排序,如果后一个与前一个相等且未保存,则保存。

function duplicates(arr) {
  return arr.sort().filter((_, i) =>
    arr[i] === arr[i + 1] && arr[i] !== arr[i - 1]
  );
}

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

function square(arr) {
    return arr.map(function(item,index,array){
        return item*item;
    })
}

function square(arr) {
   //声明一个新的数组存放结果
     var a = [];
     arr.forEach(function(e){
         //将arr中的每一个元素求平方后,加入到a数组中
         a.push(e*e);
     });
     return a;
 }

function square(arr) {
  var arr1 = [];
  for(var i=0;i<arr.length;i++){
    arr1.push(Math.pow(arr[i],2))
  }
  return arr1;
}

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

function findAllOccurrences(arr, target) {
var temp = [];
    arr.forEach(function(val,index){
        val !== target ||  temp.push(index);
    });
    return temp;
}

//filter
function findAllOccurrences(arr, target) {
    var result=[];
    arr.filter(function(item,index){
        return item===target&&result.push(index);
    });
    return result;
}
//for
function findAllOccurrences(arr, target) {
    var result=[];
    for(var i=0;i<arr.length;i++){
        if(arr[i]===target){
            result.push(i);
        }
    }
    return result;
}
//lastIndexOf+slice/splice
function findAllOccurrences(arr, target) {
    var result=[],index=arr.lastIndexOf(target);
    while(index>-1){
        result.push(index);
        arr.splice(index,1);//arr=arr.slice(0,index);
        index=arr.lastIndexOf(target);
    }
    return result;
}
//indexOf
function findAllOccurrences(arr, target) {
    var result=[],index=arr.indexOf(target);
    while(index>-1){
        result.push(index);
        index=arr.indexOf(target,index+1);
    }
    return result;
}

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

function fizzBuzz(num) {
  if(isNaN(num)){
    return false
  }
  var res="";
  if(num%3==0){
    res += 'fizz'
  }
  if(num%5==0){
    res += 'buzz'
  }
  return res?res:num
}

js一些练习题的更多相关文章

  1. js基础练习题(1)

    1.字符串 视频教程地址: js基础练习题 1.如何连接两个或者两个以上字符串? var cssname = 'box' var num = 1 var html = '<div class=& ...

  2. JavaScript基础知识----零基础js入门练习题

    1,什么是Javascript? 答:Javascipt是一种脚本语言,由web浏览器进行解释和执行.   2,JavaScript是由那几个部分组成?  答:主要分为以下三种:     ECMASc ...

  3. javascript基础修炼(13)——记一道有趣的JS脑洞练习题

    目录 一. 题目 二. 解法风暴 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 华为云社区地址 ...

  4. javascript基础修炼(13)——记一道有趣的JS脑洞练习题【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  5. js基础练习题(2)

    5.函数 1.按要求封装两个函数 1.封装一个函数,要求输入字符串转化成数组弹出 2.封装一个函数,要求能求出三个数中的最小值,注意:不准使用js内置函数 2.封装一个函数,求参数的和,注意:参数不固 ...

  6. JS事件练习题

    1.点击按钮连续弹窗5次 <div class="noe"> <div class="noe1" onClick="n()" ...

  7. JS函数练习题

    第一题:封装一个输入半径求圆的面积的函数 var banJing = parseInt(prompt("请输入圆的半径")); var x = m(banJing); alert( ...

  8. 趣味js【练习题】

    1.无限极函数递归,使每次的参数相乘 需求:add(1)(2)(3)(4)(5) 1.1首先要知道一个东西,就是function每次调用,都会默认执行tosting 1.2利用递归,每次返回的都是函数 ...

  9. js 小练习题

    <script> /*1.结论,IIFE中运行顺序3,1,执行test(4),会传递参数*/ /*var a=5; var test = (function(a){ console.log ...

随机推荐

  1. Adding Form Fields to a MS Word Document

    Configuring a Word Merge in SmartSimple is a three-step process: Create the MS Word document that wi ...

  2. ss命令能识别的TCP状态的关键字

    [TCP_ESTABLISHED] = "ESTAB",         [TCP_SYN_SENT] = "SYN-SENT",         [TCP_S ...

  3. 转载h5问题总结

    判断微信浏览器 function isWeixin(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger ...

  4. kettle脚本定时任务不执行

    问题描述:在centos机器上部署了kettle脚本,每天定时跑一次,但是并没有成功跑,手动执行命令是可以的.而且写了一个测试的shell脚本也是可以执行的. 解决方案: 将2的错误输出,/usr/l ...

  5. linux命令学习笔记(29):chgrp命令

    在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群 组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group ...

  6. Sysctl命令及linux内核参数调整

        一.Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现.    命令格式:  sysctl [-n ...

  7. 【Lintcode】118.Distinct Subsequences

    题目: Given a string S and a string T, count the number of distinct subsequences of T in S. A subseque ...

  8. Behave + Selenium(Python)一:

    Behave 介绍:(来自T先生) 最近一个项目用了behave来做测试,因为之前没有接触过,所以写下最近的心得总结. 做自动化的人估计对selenium已经不是很陌生了,但是对于Behave工具,估 ...

  9. 使用远程线程来注入DLL

    使用远程线程来注入DLL DLL注入技术要求我们目标进程中的一个线程调用LoadLibrary来载入我们想要的DLL (1)用OpenProcess函数打开目标进程(2)用VirtualAllocEx ...

  10. 微软开业网站----精华 http://www.microsoft.com/opensource/directory.aspx

    http://www.microsoft.com/opensource/directory.aspx