【问题标题】:Array updating before push - javascript [duplicate]推送前数组更新 - javascript [重复]
【发布时间】:2013-10-01 00:11:03
【问题描述】:

我有一个奇怪的情况,我试图用一个新对象来更新一个对象数组,但是当我在推送之前放置一个 console.log 语句时,它表明数组里面已经有了新对象它。以下是代码的基础知识:

 var array1=[{
    "Name": "Lake",
    "ID": "1234"
    }];

var object1={
    "Name": "Mountain",
    "ID": "1234"
    };

function testArray() {
    console.log(array1);
    array1.push(object1);

    }

如果对象包含相同的 ID,我最终希望使用新信息更新原始数组。如果它不包含相同的 ID,则应附加它。这将发生在 array1 上的 $.each 循环中。

非常感谢任何帮助。谢谢。

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    这是因为您在 Chrome 之类的 webkit 浏览器中执行此操作,而 console.log() 正在排队(这是一个 webkit bug,如果您在 Firefox 或非 webkit 浏览器中执行此操作,则不会发生),并且因此它打印数组的后一个值。你需要使用

    JSON.stringify(array1);
    

    以获得更准确的结果。

    如果您只想在对象包含相同 ID 时使用新信息更新原始数组,请使用 if 语句检查 ID:

    function updateA(obj){
      if(obj.ID === array1.ID){
        array1.push(obj); 
        console.log( JSON.stringify(array1));
      }
    }
    updateA(object1);
    

    【讨论】:

    • 这实际上发生在 Safari 中。不确定这是否是 webkit 问题...
    • @LangSchwartzwald 是的,这实际上是一个 webkit 问题..
    • 是的,这是在某些浏览器中常见的问题。 console.log() 排队。解决方法是在将输出传递给console.log() 之前对其进行字符串化。由于字符串是不变的,因此字符串不会发生此问题。这只发生在您传递一个对象或数组引用,然后立即更改(在浏览器开始将信息记录到控制台之前)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 2017-05-29
    相关资源
    最近更新 更多