Lyx1299 2022-03-14 17:06 采纳率: 100%
浏览 90
已结题

JS 数组两次打印结果异常,如何解决?(语言-javascript)

问题遇到的现象和发生背景

第一次改变数组->打印数组->第二次改变数组->打印数组,本应打印各自的结果,实际上第一次打印的结果与第二次打印的结果一致

问题相关代码,请勿粘贴截图
myMysticArr = [{name:"D",index:40},{name:"C",index:308},{name:"A",index:127},{name:"B",index:259}];

    for(var i = 0 ; i < myMysticArr.length ; i ++){
        if(myMysticArr[i].name == "A"){
            myMysticArr.unshift(myMysticArr.splice(i,1)[0]); // 把A放到最前
        }
        if(myMysticArr[i].name == "D"){
            myMysticArr.push(myMysticArr.splice(i,1)[0]); // 把D放到最后
        }
    }
    console.log(1111,myMysticArr); // 打印结果 DACB (不符合 和下面的2222的打印一样了)
    
    
    for(var i = 0 ; i < myMysticArr.length ; i ++){
        if(myMysticArr[i].name == "A"){
            myMysticArr.splice(0,0,myMysticArr.splice(i,1)[0]); // 把A放到最前
        }
        if(myMysticArr[i].name == "D"){
            myMysticArr.splice(0,0,myMysticArr.splice(i,1)[0]); // 再把D放到最前
        }
    }
    console.log(2222,myMysticArr); // 打印结果 DACB (符合预期)
运行结果及报错内容

本应打印各自的结果,实际上第一次打印的结果与第二次打印的结果一致

img

我的解答思路和尝试过的方法

即使是第二次方法改变了原数组 也不应该影响第一次的打印

我想要达到的结果

想要打印各自的结果

  • 写回答

4条回答 默认 最新

  • 关注

    用console.log()输出整个对象有值是因为console.log()输出对象或数组时是在控制台显示一个对象或数组的引用。
    在用console.log()输出数组或对象时,对象(数组)的属性是折叠不显示的。
    如果你在console.log()输出之后改变了对象(数组)的属性,当你点击三角展开属性时,会重新读取对象(数组)当前的属性,也就是显示出来的是你点击三角展开时的属性,而不是执行console.log()时的属性。

    你用console.log(JSON.stringify(obj));以字符串方式输出就可以看到对象当前的值

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月14日

悬赏问题

  • ¥15 VMware安装虚拟网络驱动程序不成功,如何解决?(操作系统-linux)
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥15 QFILHelper怎么恢复全字库,提示进程已完成,只能恢复分区文件