gpt4 book ai didi

javascript - 更改 Javascript 数组内的对象值

转载 作者:行者123 更新时间:2023-12-03 00:39:03 24 4
gpt4 key购买 nike

这个问题可能已经被问过几次了,但是我得到的错误很奇怪。我一周前才开始接触 Javascript。

我有一个函数可以更改声明的对象的属性。为了简单地重现该问题,我添加了下面的代码片段。

我试图将一个对象添加到数组中几次,并在另一个 for 循环中,我试图更改数组内部对象的属性值。

function dataPacket(buffer, label) {
var packet = {
data: []
}

var packetArray = [];
for (var i = 0; i < buffer.length; i++) {
packetArray.push(packet);
}

for (var i = 0; i < buffer.length; i++) {
packetArray[i].data = buffer[i];
console.log("At " + i + "= " + packetArray[i].data);
}

console.log(packetArray[0].data);
console.log(packetArray[1].data);
}

dataPacket([
[1, 2, 3, 4, 5],
[5, 6, 7, 8, 9]
], ["random data in strings"]);

当第一个 for 循环打印出数组的值时,两个索引上的值似乎不同,但是当调用循环外部的控制台日志记录时,两个索引上的值似乎都是相同。看起来第二次循环后它已经被覆盖了。

我可能做了一些愚蠢的事情。我也尝试过,结果似乎还不错,但是这个过程必须在 for 循环中完成,以保持过程动态。

console.log("Size of array: " + packetArray.length);
packetArray[0].data = buffer[0];
console.log("Buffer at 0: " + packetArray[0].data);
packetArray[1].data = buffer[1];
console.log("Buffer at 1: " + packetArray[1].data);

最佳答案

这是因为相同的packet对象被推送到数组中,当您从任何地方更改packet数据时,它都会反射(reflect)在引用的地方。尝试下面,我刚刚删除了对象 packet

function dataPacket( buffer, label ) {

var packetArray = [];
for(var i = 0; i < buffer.length; i++) {
packetArray.push({ data:[] });
}

for(var i = 0; i< buffer.length; i++) {
packetArray[i].data = buffer[i];
console.log("At " + i + "= " + packetArray[i].data);
}

console.log(packetArray[0].data);
console.log(packetArray[1].data);

}

dataPacket([ [1,2,3,4,5], [5,6,7,8,9] ], ["random data in strings"] );

关于javascript - 更改 Javascript 数组内的对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53537501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com