数组在push之前是否会更新 - JavaScript

3

我遇到了一个奇怪的情况,我想更新一个对象数组,加入一个新对象。然而,在我执行 push 操作之前,我在控制台打印了一下数组内容,发现新对象已经在数组中。以下是代码基本框架:

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

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

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

    }

如果对象包含相同的ID,我最终希望更新原始数组以添加新信息。 如果不包含相同的ID,则应将其附加。 这将通过对array1进行$.each循环来实现。

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

1个回答

2

这是因为您在像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的问题... - Lang Schwartzwald
@LangSchwartzwald 是的,这实际上是一个 WebKit 问题。 - Archy Will He 何魏奇
1
是的,这是一些浏览器中已知的问题。console.log()会被排队等待。解决方法是在传递给console.log()之前将输出字符串化。由于字符串是不变的,因此使用字符串时不会出现此问题。只有当您传递一个对象或数组引用并且该引用立即更改(在浏览器记录信息到控制台之前)时才会发生这种情况。 - jfriend00
仍然存在于2023年...在Chrome和Safari上进行测试。 - Harizul
2023年仍然存在...在Chrome和Safari上进行测试。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接