频道栏目
首页 > 资讯 > JavaScript > 正文

js编程小题目

17-03-09        来源:[db:作者]  
收藏   我要投稿

js编程小题目

第一题:

给定数组,求项相加。

<script type ="text/javascript">
     //声明一个函数,求任意个数的和,测试你声明的函数
    document.write (sum(2,3 ,7)+"<br />" );
    document.write (sum(2,3 ,7,4,3 ,1)+"<br />" );
    document.write (sum("Hello" ," ","Tom" )+"<br />");

     function sum () {
         var result = 0;
         //函数实际调用执行时传入的参数,可以从 arguments伪数组中获取
         for(var i = 0 ; i < arguments.length ; i++) {
            result += arguments [i];
         }
         return result;
    }
</script>

sum这个方法不理想,与字符串相加例子结果非预期。第三个变成:0Hello Tom,其他数字正常。

因为字符串与数字相加时,会默认把2非字符串变成字符串再进行字符串拼接。

 function sum () {
         var result = '';
         //函数实际调用执行时传入的参数,可以从 arguments伪数组中获取
         for(var i = 0 ; i < arguments.length ; i++) {
            result += arguments [i];
         }
         return result;
    }

sum这个方法不理想,与数字类型相加结果非预期,会变成字符串拼接。

result初始化为null也不行,与数字类型可以(因为后台转换null转成0),与字符串相加例子不过,nullHello Tom。

result只声明不赋值也不行(就是undefined),上述例子都不过,数字类型就是NaN(因为在后台转换时,undefined就转成NaN,他无法转成数字类型),字符串就是undefinedHello Tom。

正解一:

function sum () {    
    var result = arguments[0];
     //函数实际调用执行时传入的参数,可以从 arguments伪数组中获取
     for(var i = 1 ; i < arguments.length ; i++) {
        result += arguments [i];
     }
     return result;
}

正解二:arr.reduce()

        function sum(arr){
            return arr.reduce(function(pre,cur,index,arr){
                return pre+cur;
            });
        }

        var arr = ["Tom","Mary"];
        document.write(sum(arr)+"<br>");
        arr = [2,3,4];
        document.write(sum(arr));

第二题:

arr =[1,2,3,4,5,6,7,8,9]
从数组每次取出3个数 如:123 456 789 123 456 789依次循环下去。

方法一:

将数组每三项z作为一项存入新数组中,再循环打印(用setTimeout超时调用打印,不推荐用setInterval间歇调用打印)

实际应用中最好不用setInterval,因为后一次执行可能会在前一个结束之前启动。

var arr = [1, 2, 3, 4, 5, 6, 7, 8,9];
        var newArr = [];

        for (var i = 0; i < arr.length; i++) {
            if(i%3 == 0 ) {
                if( i+3 < arr.length){
                    newArr.push(arr.slice(i,i+3));
                }else{//这样做是为了如果数组不是3的倍数,也可以打印出来。arr = [1, 2, 3, 4, 5, 6, 7, 8],但不是循环;是123 456 781 123 456 ...
                    newArr.push(arr.slice(i,arr.length).concat(arr.slice(0,i+3-arr.length)));
                }
            }
        }

        var num = 0, max = 3;

        function type() {
            num++;
            newArr.forEach(function(item,index,newArr) {
                console.log(num+'次 '+item.join(''));
            });
            if(num < max){
                setTimeout(type ,500);
            }else{
                alert('done');
            }
        }
        setTimeout(type,500);

上面代码也提到了如上做法有问题,当arr = [1, 2, 3, 4, 5, 6, 7, 8],是123 456 781 123 456 …

正解:队列

利用队列先进先出的特征,把数组元素依次放进去,每次取三个,依次放回去。循环就可以了。

var arr = [1, 2, 3, 4, 5, 6, 7, 8], newStr='',num = 0, max = 3;

function loop() {
    num++;
    newStr = '';

    for(var i=0;i<3;i++){
        var item = arr.shift();
        newStr +=item;
        arr.push(item);
    }
    console.log(num+'次 '+newStr);
    if(num > max) {
        alert('done');
    }else {
        setTimeout(loop,500);
    }
}

setTimeout(loop,500);

当arr = [1, 2, 3, 4, 5, 6, 7, 8],是123 456 781 234 678 123 456 781 …

相关TAG标签
上一篇:初试Kotlin(一)
下一篇:解析iOS Crash文件
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站