2-9哪出问题了

2-9哪出问题了

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>数组反转</title>

</head>

<body>

<script>

   function arrReverse(arr){

        var newArr=[];

        for(var i=0;i<arr.length;i++){

            console.log(newArr[i]);

           //补充代码

        }


           var arr=arr.sort(function(a,b){return b-a});

            //补充代码

    }

   

       document.write(arr);

</script>

</body>

</html>


正在回答

登陆购买课程后可参与讨论,去登陆

2回答
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<script>
    function arrReverse(arr){
        var newArr=[];
        for(var i = 0; i < arr.length; i++){
           newArr[arr.length-1-i] = arr[i];
        }
        return newArr;
    }
    document.write(arrReverse([1,2,3,4,5,6,7,8]));
</script>
</body>
</html>

这个是我写的2-9

分析一下问题代码,函数中先声明了一个数组newArr,然后执行for循环,i从0到参数数组arr的arr.length-1递增1,循环内部的操作是在控制台逐项输出之前声明的数组newArr,但是因为newArr只进行了声明而没有赋值,所以newArr只是一个占位符,里面并没有值,所以什么都输出不了。后边的代码又通过定义新数组的形式将arr重新赋值,最后原样输出arr。

综上,错误有3处:1.题目中给定的newArr没有正确使用,直接在控制台输出了一个空数组;2.var arr=arr.sort(function(a,b){return b-a});如果想通过这个算法操作arr数组,不用加前边的var,因为arr已在函数头部声明好了;3.最后的输出并没有使用函数arrReverse呀。

2-9题目给好了的代码的意思是通过for循环把数组的顺序反转,并把反转好了的数组赋值给newArr然后返回newArr。当然你的算法arr=arr.sort(function(a,b){return b-a});可以一次性把数组反转倒是很简单奏效,但是没有使用题目中代码给定的newArr。

所以我认为正确的算法应该是遍历一次参数数组arr,把arr的第一项赋值给newArr的最后一项,arr的第二项复制给newArr的倒数第二项……以此类推,最后输出newArr。具体代码见上部分的代码区域。

如果按照你的思路来的话应该是这样写——

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>数组反转</title>
</head>
<body>
<script>
   function arrReverse(arr){
   		arr = arr.sort(function(a, b){return b-a});
   		return arr;
    }   
       document.write(arrReverse([1,2,3,4,5,6]));
</script>
</body>
</html>


  • 梧桐呓语 提问者 #1
    请问一下,你写的2-9,最后输出在页面上的值是document.write(arrReverse[1,2,3,4,5,6,7,8]),那样的话,return返回的结果体现在声明地方,或者是,最后体现在页面里的是那个作用的结果?
    2017-08-03 15:35:21
  • ValdisX 回复 提问者 梧桐呓语 #2
    最后体现在页面里的内容是由document.write负责输出,输出的内容是arrReverse([1,2,3,4,5,6,7,8]),这个是我们在使用自己事先定义好的函数arrReverse(arr),其中的arr在这里就被参数[1,2,3,4,5,6,7,8]所代替。而arrReverse函数的作用就是将参数中的数组进行反转,所以它就把参数[1,2,3,4,5,6,7,8]反转成[8,7,6,5,4,3,2,1],将反转的结果保存在函数内部新声明的数组newArr中并将newArr作为返回值。所以arrReverse([1,2,3,4,5,6,7,8])就相当于[8,7,6,5,4,3,2,1],这个[8,7,6,5,4,3,2,1]就是函数arrReverse的返回值。
    2017-08-03 16:03:00
提问者 梧桐呓语 2017-08-02 22:36:46

非常感谢!正是对很多概念模糊,界定不明确,所以才导致这样的

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师