JS算法题

212 阅读16分钟

1. 乘法表

for (var i = 1; i <= 9; i++) { // 外层循环决定行的数量
  for (var j = 1; j <= i; j++) { // 内层循环决定列的数量
    document.write(j + "*" + i + "=" + j * i + "&nbsp;&nbsp");
  }
  document.write("<br>"); // 添加换行
}

2.传递任意字符串,将该字符串翻转并返回

    var str = 'what is a arguments?';

    function reverseStr(newStr) {
        var strOne = ''; //定义空字符串
        for (var i = newStr.length - 1; i >= 0; i--) { //遍历形参(传递过来的字符串)
            strOne += newStr[i];
        }
        //返回倒序拼接后的字符串
        return strOne;
    }
    console.log(reverseStr(str));

3. 封装将字符串中的数字全部相加并返回

     var str = 'a4b2c7d4xx8yy6';

     function strNum(newStr) {
         var sum = 0; //定义空容器
         for (var i = 0; i < newStr.length; i++) { //遍历形参
             if (newStr[i] >= 1 && newStr[i] <= 9) { //判断当前项是否是数字
                 sum += +newStr[i]; //将该项转为数值后,累加在sum中
             }
             if (!isNaN(newStr[i])) { //第二种判断方法
                 sum += +newStr[i];
             }
         }
         return sum;
     }

     console.log(strNum(str));

4.封装一个函数,将传递过来的字符串中的所有数字拼接上一对小括号(),非数字不拼接括号,将最终的字符串返回

    var str = 'a4b2c 7d4xx8yy6';  // ==> a(4)b(2)c(7)d(4)xx(8)yy(6)
    function addBracket(newStr){
    	var strOne = '';
    	for(var i = 0; i < newStr.length;i++){ //遍历字符串
    		if(!isNaN(newStr[i]) && newStr[i] != ' '){ //判断是否为数字
    			strOne += '(' + newStr[i] + ')';
    		}else{ //如果不是数字,则原样拼接
    			strOne += newStr[i];
    		}
    	}
    	return strOne;
    }	

    console.log(addBracket(str));

5. 封装indexOf方法

    var str = 'catmatqatxat';

    function indexof(newStr, val) {
        for (var i = 0; i < newStr.length; i++) {
            if (val == newStr[i]) { //判断val 是否和当前项(newStr[i])是否相等
                return i;
            }
        }
        return -1; //循环结束如果函数没有结束,则意味着没有匹配成功,返回-1
    }

    console.log(indexof(str, 'a'));

6. var str='a2b4admin3'字符的每个数字都乘2 ,成为'a4b8admin6'

    var str = 'a2b4admin3';

    function doubleStr(newStr) {
        var strOne = '';
        for (var i = 0; i < newStr.length; i++) {
            if (!isNaN(newStr[i]) && newStr[i] != ' ') { //判断当前值是否为数字
                strOne += newStr[i] * 2;
            } else { //否则,原样拼接
                strOne += newStr[i];
            }
        }
        return strOne;
    }

    console.log(doubleStr(str));


    6.var str='abc' 让字符串重复3遍,成为 str='abcabcabc'
    var str = 'abc';

    function againStr(newStr, num) {
        var strOne = '';
        for (var i = 1; i <= num; i++) {
            strOne += newStr;
        }
        return strOne;
    }

    console.log(againStr(str, 10));

7.求数组中最大值和最小值

    var arr = [4,-1,-3,6,23,21,-5];
    function MaxMinNum(newArr){
    	var max = 0,  //求最大值:初值设的足够小
    		min = 9999999999; //求最小值:初值设的足够大
    	for(var i = 0; i < newArr.length;i++){
    		if(max < newArr[i]){ //判断max值是否小于当前项
    			max = newArr[i];  //覆盖max   
    		}
    		if(min > newArr[i]){ //判断min值是否大于当前项
    			min = newArr[i]; //覆盖min
    		}
    	}
    	return '最大值:' + max + ',最小值:' + min
    }
    console.log(MaxMinNum(arr));

    8.封装获取n--m之间的随机整数
    function randomNum(n,m){
    	return Math.floor(Math.random() * ( m - n + 1) + n);
    }	

    console.log(randomNum(1,2));

9.转驼峰

    var str = 'get-elements-by-tag-name'; //getElementsByTagName
    function fn(newStr){
    	var arr = newStr.split('-'),
    		strOne = arr[0];
    	//从第二项开始遍历数组
    	for(var i = 1; i < arr.length; i++){
    		strOne += arr[i][0].toUpperCase() + arr[i].slice(1);
    	}
    	return strOne;
    }

    console.log(fn(str));

    var str = 'i-am-want-to-sleep';
    function fn(str){
    	var arr = str.split('-'), //以'-'做分隔符转数组
    		newStr = arr[0]; //'i'
    	//从第二项开始遍历
    	for(var i = 1; i < arr.length;i++){
    		newStr += arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
    	}
    		return newStr;
    }
    console.log(fn(str));

10.去重 var arr = [1,4,5,4,5,1,2,3,2,3];

    var arr = [1, 4, 5, 4, 5, 1, 2, 3, 2, 3];

    function removeAgain(arr) {
        //定义新数组用来保存不重复的数组项
        var newArr = [];
        for (var i = 0; i < arr.length; i++) { //遍历原数组
            //判断当前项是否出现在新数组中
            if (newArr.indexOf(arr[i]) == -1) {
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }

    console.log(removeAgain(arr));

11.编写一个函数 unique(arr),返回一个去除数组内重复的元素的数组(不能使用indexof方法)

    var arr = [1,1,2,2,3,3,3,4,4,4,4,5,5,5,5,5];

    function index(newArr,val){ //arr接受保存不重复值的数组,val接受当前要判断的项
    	for(var i = 0; i <= newArr.length;i++){
    		//判断当前值val是否出现在了arr中
    		if(newArr[i] === val){
    			return false;
    		}
    	}
    			return true;
    }

    function unique(arr){
    	var newArr = [];  //定义保存不重复项的数组

    	for(var i = 0; i < arr.length;i++){ //遍历初始数组
    		if(index(newArr,arr[i])){ 
    			newArr.push(arr[i]);
    		}
    	}
    		return newArr;
    }

    console.log(unique(arr));

12.封装函数,10到100的十位随机数并升序排序

    function randomNum() {
        var newArr = [];
        while (newArr.length < 10) {
            var num = ranDom(10, 100);
            if (newArr.indexOf(num) == -1) {
                newArr.push(num);
            }
        }
        return newArr.sort(function(x, y) {
            return x - y
        });
    }

    function ranDom(n, m) {
        return Math.floor(Math.random() * (m - n + 1) + n);
    }

    console.log(randomNum());

13.删除数组中指定的值

    var arr = ["1705E","22","34305","cs","dw",100,35,28];
    function removeVal(arr,val){ //arr:接收操作的数组 val:接受要删除的项 
    	for(var i = 0; i < arr.length;i++){
    		if(arr[i] === val){ //判断数组的当前项是否和val相等
    			arr.splice(i,1);
    			return arr;
    		}
    	}
    }

    console.log(removeVal(arr,'dw'));

14.封装toFixed方法

    var Tofixed = function(num,len){//通过函数表达式声明ToFixed函数,并定义形参
    	if(len === undefined){//是否省略了len,用0来代替保留的小数位数
    		return parseInt(num);
    	}else if(len < 0 || len > 20){//判断len是否在0~20之间,如果超出范围,则报错
    		alert('超出范围');
    	}else{
    		var str = String(num); //将数值转为字符串
    		if(str.indexOf('.') != -1){
    			var qian = str.slice(0,str.indexOf('.'));//截取小数点前的部分
    			var hou = str.slice(str.indexOf('.') + 1);//截取小数点后的部分 
    			if(hou.length < len){//判断num小数个数是否小于len,如果小于不够部分则补零
    				for(var i = 1; i <= len - hou.length;i++){
    				 		str += '0'; //将0拼接到原数字上
    				}
    				return str;
    			}else if(hou.length > len){//如果num小数个数大于len,则按len指定的位置截取小数
    				return qian + '.' + hou.slice(0,len); //7、将截取后的小数与整数部分拼接并输出
    			}else{
    				return num;
    			}
    		}
    	}
    }


    console.log(Tofixed(12,3));
function Tofixed(num,len){
  var str = String(num);
  if(len === undefined || len === 0){
  	return parseInt(num); //返回整数部分
  }else{
  	if(str.indexOf('.') == -1){
  		for(var i = 1; i <= len;i++){
  			if(i == 1){
  				str += '.0';
  			}else{
  				str += '0';
  			}
  		}
  		return str;
  	}
  	else{
  		var first = str.slice(0,str.indexOf('.')), //截取.之前的内容
  		last = str.slice(str.indexOf('.') + 1); //截取.之后的内容
  		if(len === last.length){//如果需要保存的位数和当前位数一致 则原样返回	
  				return num; 
  		}else if(len > last.length){//如果要保存的位数5大于当位数3则补差值(5-3)个0
  			var newLen = len - last.length; //计算差值
  			for(var i = 1; i <= newLen;i++){
  				if(last.length == 0){
  					last += '.0'; 
  				}else{
  					last += '0';
  				}
  			
  			}
  			return first + '.' + last;
  		}else{
  			return first + '.' + last.s  lice(0,len);
  		}
  	}

  	
  }

}

    var num = 12.23;
    console.log(Tofixed(1.234,0));

15. 编写一个函数 spacify,返回一个每个字符中添加空格的字符。

    spacify("ScriptOJ") // => "S c r i p t O J"
    function spacify(str){
    	var newStr = '';
    	//遍历字符串
    	for(var i = 0; i < str.length;i++){
    		newStr += str[i] + ' ';
    	}
    	return newStr;
    }

    console.log(spacify('woxiangshuijiao'));

16.检查一个字符串(str)是否以指定的字符串(target)结尾

    function confirmEnding(str,val){
    	var arr = [];
    	if(str.indexOf(' ') != -1){
    		arr = str.split(' '); //如果有空格 ==> 通过空格转数组 
    	}else{
    		arr = str.split('');  //如果没有空格 ==> 通过空字符串转数组
    	}

    	if(arr[arr.length - 1] === val){
    		return true;
    	}	
    		return false;
    }

    console.log(confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "frozen")); 

    console.log(confirmEnding("Bastian", "t"));

17.首字母大写,其余全部小写

确保字符串的每个单词首字母都大写,其余部分小写。(eg:titleCase("I'm a little tea pot") 应该返回 "I'm A Little Tea Pot". titleCase("sHoRt AnD sToUt") 应该返回 "Short And Stout".) 会每天写一个 主要也是没有事件,如果有更简单的方法可以分享一下,如有好的知识点望大家也分享一下谢谢,小弟感激不尽!

    function titleCase(str) {
        var arr = str.toLowerCase().split(' '),
            newStr = '';
        //遍历数组 
        for (var i = 0; i < arr.length; i++) {
            //将当前项的第一


            arr[i].slice(1) + ' ';
        }
        return newStr;
    }

    console.log(titleCase('Im a little tea pot'));
    console.log(titleCase('sHoRt AnD sToUt'));

18.金克斯的迫击炮 第一种

  function destroyer(arr){
    		for(var i = 1; i < arguments.length;i++){
    			for(var j = arr.length - 1; j >= 0;j--){
    				if(arguments[i] === arr[j]){ //判断当前arugmnets项是否和arr项相等,如果相等则把arr项删除
    					arr.splice(j,1);
    				}
    			}
    		}
    			return arr;
    	
    }
    console.log(destroyer([1,2,2,3,1], 2, 3));// 应该返回 [1, 1].
    console.log(destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3));// 应该返回 [1, 5, 1]

金克斯的迫击炮 第二种

       function destroyer(arr,a,b){
    	var newArr = [];
    	for(var i = 0; i < arr.length;i++){
    		if(arr[i] !== a && arr[i] !== b){ //判断当前项是否不等于a也不等于b
    			newArr.push(arr[i]);
    		}
    	}
    		return newArr;
    }
    console.log(destroyer([1,2,2,3,1],2,3));
    var arr = [2,3,1];
    arr.sort(function(x,y){return x - y})  == >  [1,2,3]

19.找出最长单词在句子中找出最长的单词,并返回它的长度。函数的返回值应该是一个数字。

    var str = 'Walking on water and developing software';
    function longest(str){
    	var arr = str.split(' '),	
    		count = 0;
    	//遍历数组
    	for(var i = 0; i < arr.length;i++){
    		if(count < arr[i].length){
    			count = arr[i].length;
    		}
    	}
    	return count;
    }

    console.log(longest(str));

20.如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。

举例,["hello", "Hello"]应该返回true,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。 ["hello", "hey"]应该返回false,因为字符串"hello"并不包含字符"y"。

    var arr = ['hello', 'Hello'];

    function searchAgain(arr) {
        arr[0] = arr[0].toLowerCase(); //全部转小写
        arr[1] = arr[1].toLowerCase();

        for (var i = 0; i < arr[1].length; i++) { //遍历第二个数组项
            if (arr[0].indexOf(arr[1][i]) == -1) { //判断第二个数组项中的数是否出现在了第一项里 
                return false;
            }
        }
        return true;
    }

    console.log(searchAgain(arr));
    console.log(searchAgain(['QwrADz', 'qWe']));

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

    输入  [1, 2, 3, 4], 'z', 2
    输出  [1, 2, 'z', 3, 4]
    function addNode(arr,val,index){
    	var newArr = [];
    	//遍历原数组
    	for(var i = 0; i < arr.length;i++){
    		if(i == index){ //判断是否为要添加的下标 
    			newArr.push(val);  
    		}
    			newArr.push(arr[i]);//[1,2,'z',3,4]
    	}
    		return newArr;
    }

    console.log(addNode([1,2,3,4],'z',2));

22.先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。

举例:where([1,2,3,4], 1.5) 应该返回1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1。

同理,where([20,3,5], 19) 应该返回 2。因为数组会先排序为 [3,5,20],19插入到数组[3,5,20]后变成[3,5,19,20],而19对应的索引值就是2。

    function where(arr,val){
    	arr.sort(function(x,y){return x - y ;})
    	console.log(arr)
    	//遍历排序后的arr
    	for(var i = 0; i < arr.length;i++){
    		if(val <= arr[i]){
    			return i;
    		}
    	}
    }

    console.log(where([1,3,2,4],2.5)); //[1,2,3,4] 2.5

23.查找字符串中出现次数最多的字符和次数 第一种

    var str = 'baacqabbccbcbc';

    function searchStr(str) {
        var max = 0, //max记录出现最多的次数
            val = ''; //val记录出现最多的字符
        for (var i = 0; i < str.length; i++) {
            //字符串转数组的项数  == 字符在字符串出现的次数 + 1;
            var arr = str.split(str[i]);
            if (max < arr.length - 1) {
                max = arr.length - 1;
                val = str[i];
            }
        }
        return '出现最多的是' + val + ',出现了' + max + '次';
    }
    console.log(searchStr(str));
    var str = 'abbccc';
    function searchZf(str){
    	var val = '',
    		count = 0;
    	for(var i = 0; i < str.length;i++){// 遍历字符串
    		var arr = str.split(str[i]); //将字符串通过当前项转为数组
    		if(count < arr.length - 1){
    			val = str[i];
    			count = arr.length - 1;
    		}
    	}
    		return '出现最多的是:' + val  + '出现了:' + count + '次';
    }
    //split(分隔符)方法 ==> 分割后的数组长度 = 分隔符在字符串中出现的次数 + 1;

    console.log(searchZf(str));

查找字符串中出现次数最多的字符和次数 第二种

    var str = 'abbccc',
    	max = 0,
    	val = '';

    for(var i = 0; i < str.length;i++){
    	var count = 0;
    	for(var j = 0; j < str.length;j++){
    		if(str[i] === str[j]){
    			count++;
    		}
    	}
    	if(max < count){
    		max = count;
    		val = str[i];
    	}
    }

    console.log(max,val)

24.参数:数组,二维数组每一项的长度

     function test(arr, n) {
         var arr2 = [].concat(arr); // 得到一个新数组,为了不影响传入的数组
         var newArr = []; // 用于存储新的二维数组
         while (arr2.length) {
             newArr.push(arr2.splice(0, n)); // arr2.splice(0, n)的返回值是一个数组,将它添加到新数组中
         }
         return newArr;
     }

     var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
     var c = test(arr, 2);
    // console.log(c);

     var d = test(arr, 3);
    console.log(d);

25.封装一个format 函数,传入一个长度相等的一维数组组成的二维数组作为参数,在函数内部按照下面实例对该二维数组进行格式化,最后将格式化的结果返出来。

    1)例:定义一个二维数组source1=[[1,2,3],[4,5,6],[7,8,9]],执行format(source1)的返回结果是:[[1,4,7],[2,5,8],[3,6,9]]
    2)例:定义一个二维数组source2=[[1,2],[3,4],[5,6]],执行format(source2)的返回结果是:[[1,3,5],[2,4,6]]
    3)例:定义一个二维数组source3=[[1,2,3,4],[5,6,7,8]]执行format(source3)的返回结果是:[[1,5],[2,6],[3,7],[4,8]]
    var format = function(arr) {
        var len = arr[0].length, //获取新数组的长度
            newArr = [];
        for (var i = 0; i < len; i++) {
            var arrOne = []; //定义空数组组 ==> 保存每一个小数组中的项
            for (var j = 0; j < arr.length; j++) {
                arrOne.push(arr[j][i]);
            }
            newArr.push(arrOne);
        }
        return newArr;

    }

    var arr = [
        [1, 2],
        [3, 4],
        [5, 6]
    ];

    //	[[1,3,5],[2,4,6]]
    console.log(format([
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]));

26.封装一个函数equal(a1,a2),传入两个一维数组,判断两个数组是否包含相同的元素,如果相等,函数的返回值为true,不相等,函数的返回值为false

                1)例:arr1 = ['a', 'b'] arr2 =['b', 'a'],equal(arr1,arr2)的返回值为true
                2)例:arr3 = [2,3] arr4=[3,4],equal(arr3,arr4)的返回值为false
    		function equal(a1,a2){
    			for(var i = 0; i < a1.length;i++){ //遍历a1循环
    				if(a2.indexOf(a1[i]) == -1){
    					return false;
    				}
    			}
    					return true;
    		}

    		var arr1 = ['a','b'],
    			arr2 = ['b','a'];

    		console.log(equal(arr1,arr2))

27.编程实现,往数组里插入一个元素

    var arr = ['马上','月考','啦','哈哈'];
     function insert(arr,index,val){
     	for(var i = arr.length - 1; i >= index;i--){
     			arr[i + 1] = arr[i];
     	}
     			arr[index] = val;
     			return arr;
     }

    console.log(insert(arr,0,'请求'));


    ['马上','月考','嘻嘻','啦','哈哈']

28.冒泡排序 ==> 封装sort方法

       var arr = [3,4,1,5,2];   	   
       function fn(){
       	var temp; //定义中间变量
       //外循环控制比较的轮数 = (元素个数 - 1)  轮 
       for(var i = 1; i <= arr.length - 1;i++){
       //内循环控制每轮比较的次数 = 元素个数 - 当前轮数
       		for(var j = 0;j < arr.length - i;j++){
       			if(arr[j] > arr[j + 1]){ // > 升序排序 < 降序排序
       				temp = arr[j];
       				arr[j] = arr[j+1];
       				arr[j+1] = temp;
       			}
       		}
       }
       	return arr;
    }
    	console.log(fn(arr));

29.10到100的十位随机数并排序(不能重复)

    function randomNum(){
    		var arr = [];
    		while(arr.length < 10){ //判断arr中的值是否小于10
    			var val = ranDom(10,100); //获取10-100之间的随机数
    			if(arr.indexOf(val) == -1){
    				arr.push(val);
    			}
    		}
    		return arr.sort(function(x,y){return x - y })
    }	

    //封装获取随机数的方法
    function ranDom(n,m){ // n接收最小值 m接收最大值
    		return Math.floor(Math.random() * (m - n + 1) + n);
    }

    console.log(randomNum());

30.千分符

    var num = 222191;

    function fn(num) {
        var str = String(num); //先将数字转为字符串
        var index = str.length % 3; //0
        var newStr = str.substr(0, index); //先截取前面的部分
        for (var i = index; i < str.length; i += 3) {
            if (i == 0) {
                newStr += str.substr(i, 3);
            } else {
                newStr += ',' + str.substr(i, 3);
            }

        }
        return newStr;
    }
    console.log(fn(num));

31.判断字符串是否对称

    var  str1="23421"; 

    function isduic(str){
      		for(var i = 0; i < str.length/2; i++){
      			if(str[i] !== str[str.length - 1 - i]){
      				return '不对称';
      			}
      		}
      				return '对称';
       }
       console.log(isduic(str1));

32.参数:数组,二维数组每一项的长度

    function test(arr, n) {
        var newArr = []; // 用于存储新的二维数组
        while (arr.length) { //1
            newArr.push(arr.splice(0, n)); // arr2.splice(0, n)的返回值是一个数组,将它添加到新数组中
        }
        return newArr;
    }

    var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
    console.log(test(arr, 3))


    newArr = [        ['a', 'b', 'c'],
        ['d', 'e', 'f'],
        ['g', 'h', 'i'],
        ['j']
    ]

33.!!!编写一个方法将一维数组转化成二维数组(将数组中的重复项合并到一个新数组,最后拼接成一个二维数组)==> 非常重要!!!!!!!

    经过转换后的结果
    [ [2,2,2], [1,1], [3,3,3,3], [4,4] ]

    function test(arr) {
        arr.sort(); // 排序
        var newArr = []; // 存储二维数组
        var val = arr[0]; //获取数组中的第一个值
        for (var i = 0; i < arr.length; i++) { //遍历arr数组
            if (val !== arr[i]) {
                //更新val值  
                val = arr[i];
                newArr.push(arr.splice(0, i));

                i = 0; //把i重置为0
            }
        }
        newArr.push(arr) //把最后一组数 添加到newArr的队尾
        return newArr;
    }

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

    var arr = [2, 1, 2, 3, 2, 3, 4, 3, 3, 4, 1];
    var c = test(arr);
    console.log(c);

34.1.封装一个numberSort(nList)函数,实现如下功能:nList是个数字串,例如1,4,5,23,2,17,24,897。请把这串数字转为数组后按照中间高两边低进行排序,最后的结果是["1", " 4", " 5", " 23", " 897", " 24", " 17", " 2"],请注意左右翼数据数据的平衡性(左右两边的数个数一致)

     function numberSort(nList){
     	//将数字串nList转为数组
     	var arr = nList.split(','),
     		firstArr = [],
     		lastArr = [];
     	if(arr.length % 2){//正确的判断数组长度是否为偶数
     		arr.sort(function(x,y){return x - y}); //升序排序
     		var val = arr.splice(arr.length - 1,1)[0]; //删除最大值
     		firstArr = arr.slice(0,arr.length/2); //获取前面数组
     		lastArr = arr.slice(arr.length/2); //获取后面数组
     		firstArr.sort(function(x,y){return x - y}); //前一个升序排序
     		lastArr.sort(function(x,y){return y - x}); //后一个降序排序
     		return firstArr.concat(val,lastArr);
     	}else{//偶数
     		firstArr = arr.slice(0,arr.length/2); //获取前面数组
     		lastArr = arr.slice(arr.length/2); //获取后面数组
     		firstArr.sort(function(x,y){return x - y}); //前一个升序排序
     		lastArr.sort(function(x,y){return y - x}); //后一个降序排序
     		return firstArr.concat(lastArr);
     	}
     }
     console.log(numberSort('1,23,6,56,213,321,12,31,2,122'));

35.1.完成 isAnagram,接受两个字符串作为参数,返回true 或者 false 表示这两个字符串是否同字母异序。

同字母异序指的是两个字符串字母种类和字母的数量相同,但是顺序可能不同
例如:
function isAnagram(arrOne,arrTwo){
    	if(arrOne.length == arrTwo.length){
    		for(var i = 0; i < arrOne.length;i++){
    			if(arrTwo.indexOf(arrOne[i]) == -1){
    				return false;
    			}
    		}
    		return true;
    	}
    }

    console.log(isAnagram("anagram", "nagaram"));  // return true.
    console.log(isAnagram("rat", "car"));  // return false.

36.2.完成getSum(),该函数接收1个数组作为参数,返回该数组中所有非重复数字的和;

getSum([undefined,"23year",19,"097",1,"hello",null,1])  // return 20
function getSum(arr){
    	var newArr = [],
    		sum = 0;
    	for(var i = 0; i < arr.length;i++){ //去重
    		if(newArr.indexOf(arr[i]) == -1){
    			newArr.push(arr[i]);
    		}
    	}

    	//遍历新数组,将该数组中的所有数字相加
    	for(var j = 0; j < newArr.length;j++){
    		if(typeof newArr[j] == 'number'){
    			sum += newArr[j];
    		}
    	}	

    	return sum;

    }

    console.log(getSum([undefined,"23year",19,"097",1,"hello",null,1]))

37.3.完成uniqueNums(),该函数接收1个参数n(一个不大于31的整数),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32];

    function uniqueNums(n){	
    	var arr = [];	
    	while(arr.length < n){   //n == 3
    		var num = randomNum(2,32); //获取随机数
    		if(arr.indexOf(num) == -1){ //判断当前的随机数是否出现在了arr中
    			arr.push(num);
    		}
    	}
    		return arr;

    }

    //封装获取随机数的函数
    function randomNum(n,m){
    	return Math.floor(Math.random() * ( m - n + 1) + n);
    }



    console.log(uniqueNums(20));  // return [19,7,10]

38.提取参数

    var url = 'www.quna.com/kdsadjksd?data_in=2019-5-1&data_out=2019-5-4&cityid=02&name=八维国际';
    function searchInfor(str,val){
    	//1.截取有效字符串
    	//2.以'&'做分隔符转数组
    	var arr = url.slice(url.indexOf('?') + 1).split('&');
    	//遍历arr数组
    	for(var i = 0; i < arr.length;i++){
    		//用val和每个数组项'='前的内容做比较
    		if(val == arr[i].slice(0,arr[i].indexOf('='))){
    			return arr[i].slice(arr[i].indexOf('=') + 1);
    		}
    	}
    }


    console.log(searchInfor(url,'cityid'));
    searchInfor(url,'data_in');
    searchInfor(url,'cityid');

39.2. 封装一个函数searchResult(),根据传入的数据及条件,输出符合条件的人名,最终得到是一个数组。

    (2)	searchResult(stus,’女’,’大一’)根据数据去查询,将符合条件女且大一的学生姓名放到一个数组中返回
    var stus = [['小A', '女', 21, '大一'],
    			['小B', '男', 23, '大三'],
    			['小C', '男', 24, '大四'],
    			['小D', '女', 21, '大一'],
    			['小E', '女', 22, '大四'],
    			['小F', '男', 21, '大一'],
    			['小G', '女', 22, '大二'],
    			['小H', '女', 20, '大三'],
    			['小I', '女', 20, '大一'],
    			['小J', '男', 20, '大三']];

    	function searchResult(arr,sex,glass){
    		var  newArr = [];
    		for(var i = 0; i < arr.length;i++){
    			if(arr[i].indexOf(sex) != -1 && arr[i].indexOf(glass) != -1){
    				newArr.push(arr[i][0]);
    			}
    		}
    			return newArr;
    	}

    console.log(searchResult(stus,'大一','女'));

40.封装一个函数color(),根据传入的参数来实现获取或设置背景或字体颜色。

function color(node,sty,styleval){
  if(styleval === undefined){ //判断第三个参数是否接收到值
  	return node.style[sty];	
  }else{
  	node.style[sty] = styleval; //设置样式
  }

} var box = document.getElementById('box'); console.log(color(box,'background')); //用于获取box的背景色 console.log(color(box,'background-color','black'));//用于设置box的背景色为红色

41.二维数组转一维数组

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

    var arr = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ];
    console.log(erBianYi(arr));

42.n天之后星期几

    function nDay(n){
    	var date = new Date(); //创建日期对象
    	date.setDate(date.getDate() + n); //设置日期
    	return date.getDay(); //返回星期
    }

    console.log(nDay(3));

43.封装一个方法,实现求任意多个数的平均值

    function sum(){
    	var Sum = 0;
    	for(var i = 0; i < arguments.length;i++){
    		Sum += arguments[i];
    	}
    	return Sum / arguments.length;
    }

    console.log(sum(2,3,4));

44.随机从数组中取出三个不同的值。var arr = [1,2,3,4,5,6,7,8,9]

var arr = [1,2,3,4,5,6,7,8,9];
     function randomNum(arr){
     		var newArr = [];
     		while(newArr.length < 3){
     			var num = arr[Math.floor(Math.random() * arr.length)]
     			if(newArr.indexOf(num) == -1){
     				newArr.push(num);
     			}
     		}
     			return newArr;
     }

     console.log(randomNum(arr));
     var arr = [1,2,3,4,5,6,7,8,9]; //数组不重复的时候
     function randomNum(arr){
     		var newArr = [];
     		while(newArr.length <3){
     			var num = arr[Math.floor(Math.random() * arr.length)];
     			newArr.push(num);
     			arr.splice(arr.indexOf(num),1);
     		}
     			return newArr;
     }

     console.log(randomNum(arr));
function fn(n){
 	 arr = ['零 ','一','二','三','四','五','六','七','八','九'];
 	 return arr[n];
 }

 function newFn(num){
 		if(num < 10){
 			return fn(num);
 		}else if(num % 10 == 0){
 			return fn(Math.floor(num /10)) + '十';
 		}else{
 			return fn(Math.floor(num /10)) + '十' + fn(num % 10);
 		}
 }

 console.log(newFn(88));
function fn(str) {
        return str
    }
    console.log(fn("abc"))