老师这道题我不理解

老师这道题我不理解

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>数组</title>
</head>
<body>
<script>
    function arrReverse(arr){
            //这里是赋值一个空数组用来存放新数组
        var newArr=[];
        //这里是运用for循环进行接受新数组内容
        for(var i=0;i<arr.length;i++){
           //补充代码
           
           这个时候我理解的新数组接收不应该是:arr[arr.length] = i;
           newArr[arr.length-1-i]=arr[i];
        }
       //补充代码
       
       //还有这个地方弹出的newArr和下边的(arrReverse([1,2,3,4,5,6,7,8]))
       这个arr数组是一个吗?newArr和arr表示同一个数组吗?
       return newArr;
    
    }
   document.write(arrReverse([1,2,3,4,5,6,7,8]));
</script>
</body>
</html>


正在回答 回答被采纳积分+1

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

1回答
好帮手慕小李 2022-04-07 10:44:16

同学你好,解答如下:

1、

https://img1.sycdn.imooc.com//climg/624e4f5d09995e1112130705.jpg

2、它们是一个数组,arrReverse([1, 2, 3, 4, 5, 6, 7, 8])中的[1, 2, 3, 4, 5, 6, 7, 8]就是实际传递的参数,function arrReverse(arr)这里的arr就是形式参数,那么在function arrReverse方法内。arr就是[1, 2, 3, 4, 5, 6, 7, 8]。

https://img1.sycdn.imooc.com//climg/624e4f8a09d8849510300678.jpg

祝学习愉快!

  • 提问者 dy12369 #1

    老师,我还是不理解。为什么arr[i] = newArr[arr.length-1-i]。

    不知道这个怎么赋值,它们之间什么联系。这道题完全没有头绪。

    2022-04-07 15:11:22
  • 好帮手慕小李 回复 提问者 dy12369 #2

    同学你好,参考如下:

    首先要知道的是这道题,主要是想把传递进去的数组,倒序排列,倒序排列其实就是说我传递进去的顺序是1,2,3,经过处理后是3,2,1。那么这里其实就相当于是说往新数组中newArr把原来传递进来的数组按照下标进行重新排列。

    首先我们先来看看这里用到的知识点。

    https://img1.sycdn.imooc.com//climg/624e944e09d0ae9205780127.jpg

    控制台中输入arr的长度是4。

    https://img1.sycdn.imooc.com//climg/624e947009587a4804960049.jpg

    那么数组的长度虽然是4,但是要挨个打印它们,会发现arr[4]其实是没有值的。

    https://img1.sycdn.imooc.com//climg/624e94b9090ecebe08050291.jpg

    https://img1.sycdn.imooc.com//climg/624e94c7099b661f04890101.jpg

    最后我们来看看arr.length - 1,会是什么情况。

    https://img1.sycdn.imooc.com//climg/624e94f909d7146510020365.jpg

    控制台输出的是3。

    https://img1.sycdn.imooc.com//climg/624e95150975a5aa03360032.jpg

    那么如果说我们用arr[arr.length -1] =?

    https://img1.sycdn.imooc.com//climg/624e958e094b9e5405740409.jpg

    https://img1.sycdn.imooc.com//climg/624e9597099017a703990049.jpg

    输出的是4,那么arr.lenght -1 = 3 相当于就是arr[3]这个意思。那么arr[3]是不是就4啊。

    现在反过来我们看看同学迷糊的地方,首先我们明确了这个方法就是倒序了数组的排序,那么它用的其实就是

    newArr[7] = arr[0];

    newArr[6] = arr[1];

    newArr[5] = arr[2];

    newArr[4] = arr[3];

    newArr[3] = arr[4];

    newArr[2] = arr[5];

    newArr[1] = arr[6];

    newArr[0] = arr[7];

    同学可以在刚进入方法的时候,打印一下arr的length。如下:

    https://img1.sycdn.imooc.com//climg/624e96e7092a841a10010593.jpg

    接下来我们正式往下走,进入循环以后,当i=0的时候,那么newArr[arr.length - 1 - i] 其实就等于newArr[8-1-0] == newArr[7],那么我们要在newArr[7]个位置,把arr[i]也就是arr[0]个的值给到newArr[7]就行了。

    当i=1,newArr[arr.length - 1 - i] 其实就等于newArr[8-1-1] == newArr[6]。arr[i]就是arr[1]。

    当i=2,newArr[arr.length - 1 - i] 其实就等于newArr[8-1-2] == newArr[5]。arr[i]就是arr[2]。

    i=3,newArr[arr.length - 1 - i] 其实就等于newArr[8-1-3] == newArr[4]。arr[i]就是arr[3]。

    i=4,newArr[arr.length - 1 - i] 其实就等于newArr[8-1-4] == newArr[3]。arr[i]就是arr[4]。

    i=5,newArr[arr.length - 1 - i] 其实就等于newArr[8-1-5] == newArr[2]。arr[i]就是arr[5]。

    i=6,newArr[arr.length - 1 - i] 其实就等于newArr[8-1-6] == newArr[1]。arr[i]就是arr[6]。

    i=7,newArr[arr.length - 1 - i] 其实就等于newArr[8-1-7] == newArr[0]。arr[i]就是arr[7]。

    最后就相当于是把arr索引是0赋值给了newArr最后一位以此类推,到最后arr索引的最后一位,赋值给到了newArr的第一位,这样就起到了把传递进去的数组,位置进行倒序了。

    同学自己试试,祝学习愉快!

    2022-04-07 15:54:11
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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