zoukankan      html  css  js  c++  java
  • js练习题

    /*
            1,编写一个javscript函数 fn,
            该函数有一个参数 n(数字类型),其返回值是一个数组,
            该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。
            */
            function fn(n){
    
                var max = 32,min = 2;   // 这边设置动态的数,以便后续可调节
    
                //先做n的校验
                if (isNaN(n)) return;   // 不能非数字
                if (n<1||n>31) return;  // 不能小于1或者大于31
                if (n%1 !== 0) return;  // 不能非整数
                
                var c = max - min + 1;  // 共有这么多数字
                var arr = [];   // 要返回的初始空数组
                for (var i = 0; i< n; i++) {
                    if (i==0) {
                     // 如果是第一个数字,那么不用检验,肯定是不存在的
                        var a = Math.floor(Math.random()*c+min);
                        // [min, max]区间内的随机数,用Math.floor(Math.random()*(max-min+1)+min);
                        arr.push(a);
                    } else {
                        checkExistNum(arr,c,min);
                    };                
                };
                return arr
            };
    
            function checkExistNum(arr,c,min){
                var a = Math.floor(Math.random()*c+min);
                var isRepeat = arr.indexOf(a) === -1;
                if (isRepeat) {
                    arr.push(a);
                    return
                } else {
                    checkExistNum(arr,c,min);
                }
            };
    
            /*2,编写尽可能简洁的javascript代码,找到在第一个数组array1中出现,而在第二个数组array2中没有出现的数字。*/
    
            function fn2(array1, array2){
                var array3 = array1.filter(function(item){
                    return (array2.indexOf(item) === -1)
                });
                return array3
            }
            
    
            /*3,编写函数,用于过滤一个数组内重复的元素,并用这些元素重构一个新的数组,新数组内也不能有重复元素。*/
            
    
            function fn3(array) {
                var array2 = filterRepeat(array);   // 过滤后的数组,无重复
                var array3 = [];
                array.forEach(function(item,index){
                    if (array.indexOf(item) !== index) {
                        array3.push(item)
                    }
                });
                var array4 = filterRepeat(array3);
                var obj = {
                    '过滤后的数组': array2,
                    '过滤后的元素组成的数组': array4
                };
                return obj
            };
    
            function filterRepeat(array){
                var array2 = array.filter(function(item,index){
                    return (array.indexOf(item) === index)
                });
                return array2
            }
    
    
    
            /*4.现有一个数组(元素为数字,并且有可能重复),请给Array.prototype增加一个方法(方法名自取),该方法能去掉数组中全部最大和最小的数字。*/
    
            // 我想到有一个正排序数组的方法,然后直接头部和尾部就是最大和最小值
    
            function compareNum(a,b){
                if (a<b) {
                    return -1
                } else if (a>b) {
                    return 1
                } else {
                    return 0
                }
            }
    
            Array.prototype.extremeNumber = function(){
                var that = this.slice();                    
                // 这里有个注意点,不能直接写var that = this;因为this是数组,是object不是基本类型,复制的话是按引用类型传递,如果修改that那么this也会改变,所以要用slice,这里也可以用concat,但是如果当前环境是webkit,就用concat更快,如果是普通浏览器,就用slice更快
                var newArray = that.sort(compareNum);
                var a = newArray.length;
                var minNum = newArray[0];   // 一定是最小值
                var maxNum = newArray[a-1]; // 一定是最大值
                var array = this.filter(function(item){
                    return (item !== minNum && item !== maxNum)
                });
                return array
            };
    
            // 还有一个是用Math.max和Math.min的方法依次对比,配合归并,事实证明,这段代码最少最优
            Array.prototype.extremeNumber = function(){
                var maxNum = this.reduce(function(prev, cur){
                    return Math.max(prev, cur)
                });
                // 这里也是求一个数组最大值的方法
                var minNum = this.reduce(function(prev, cur){
                    return Math.min(prev, cur)
                });
                // 这里也是求一个数组最小值的方法
                var array = this.filter(function(item){
                    return (item !== minNum && item !== maxNum)
                });
                return array
            }
    
    
            /*5, 如何准确判断一个javascript对象是数组? */
            function judgeArray(array){
                if (typeof array === 'object' && array instanceof Array === true) {
                    return true
                } else {
                    return false
                }
            }
            // 还有一种是通用的方法,Object.prototype.toString,这个方法还可以判断其他类型
            function judgeArray(array){
                return Object.prototype.toString.call(array)=='[object Array]';
            }
    
    
    
    
            /*6,写出一个javascript的函数,实现对一个数组去重的功能。*/
            // 这个跟上面那个3一样了,再写一遍
    
            function removeRepeat(array){
                var repeatArray = array.filter(function(item,index){
                    return (array.indexOf(item) == index)
                });
                return repeatArray
            }
    
            /*7,请写出一个函数,功能是删除数组的指定下标元素。*/
    
            function deleteElement(index,array){
                if (index>array.length-1) return;
                var newArr = array.filter(function(item,a){
                    return (a !== index)
                });
                return newArr
            }
            // 我忘记了有个方法叫splice
    
            function deleteElement(index,array){
                array.splice(index, 1);
                return array
            }
    
    
            /*8,请写一个函数removeVoid(arr),删除该数组中值为“null,undefined”的项,返回原数组。*/
    
            function removeVoid(arr){
                var newArr = arr.filter(function(item){
                    return (item !== null && item !== undefined)
                });
                return newArr
            }
    
    
            /*9,请给Array本地对象增加一个原型方法,它的用途是删除数组中重复的条目,并将数组返回。*/
    
            Array.prototype.removeRepeat = function(array){
                var repeatArray = array.filter(function(item,index){
                    return (array.indexOf(item) == index)
                });
                return repeatArray
            }
    
    
            /*10, 用js实现随机选取10~100之间的10个数字,存入一个数组,并排序。*/
    
            function sortNumber(){
                var newArr = [];
                var max = 100, min = 10;
                var c = max - min + 1;
                for(var i = 0; i< 10; i++) {
                    var randomNum = Math.floor(Math.random()*c + min);   // 10-100区间的随机数字
                    newArr.push(randomNum);
                };
                newArr.sort(compareNum);
                return newArr
            }
    
            function compareNum(a,b){
                if (a<b) {
                    return -1
                } else if (a>b) {
                    return 1
                } else {
                    return 0
                }
            }
    
    
    
            /*11, 把两个数组合并,并删除第二个元素。*/
            function concatArr(arr1, arr2) {
                var newArr = arr1.concat(arr2);
                newArr.splice(2,1);
                return newArr
            }
    
    
            /*12,根据每个元素的i属性,由小到大排序如下数组。*/
            function sortArr(array){
                var newIArr = [], newArr=[];
                array.forEach(function(item){
                    // 这边我就不判断是否存在i属性了,因为题中给了具体的数组,确定每个元素都有i属性
                    newIArr.push(item['i'])
                });
                newIArr.sort(compareNum);
                newIArr.forEach(function(it){
                    array.forEach(function(item){
                        if(item['i'] == it) {
                            newArr.push(item)
                        }
                    })
                });
                return newArr
            }
    
            function compareNum(a,b){
                if (a<b) {
                    return -1
                } else if (a>b) {
                    return 1
                } else {
                    return 0
                }
            }
    
            // 做复杂了,最简单的如下
            function sortArr(arr){
                var newArr = arr.sort(function(a,b){
                    return a - b
                });
                return newArr
            }
  • 相关阅读:
    RMAN备份脚本
    配置putty隧道登录远程window远程或远程数据库
    ssh登录报错:no common kex alg
    Solaris上修改进程能够打开的最大文件句柄数
    如何在V890上安装配置rsc(转)
    Oracle表或分区导出脚本
    检查日期合法性脚本(转)
    Solaris下常用的磁带操作命令
    如何从solaris操作系统上获取机器的sn号
    如何修复failed磁盘和"DISABLED RECOVER"状态的plex
  • 原文地址:https://www.cnblogs.com/yanchenyu/p/7568720.html
Copyright © 2011-2022 走看看