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

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 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀