javascript - 更改 Javascript 数组中的对象值
问题描述
这个问题可能已经被问过几次,但我得到的错误很奇怪。一周前我刚开始使用 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
从任何地方更改数据时,它会反映在它被引用的地方。试试下面,我刚刚删除了对象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"] );
推荐阅读
- php - 循环遍历数组并添加相同的键值
- windows-server-2008-r2 - Server 2008 R2 Secondary Domain Controller - Accidentally Disabled Network Adapter
- django - 如何使用 Docker 将图形工具附加到 Django
- java - 无法在 Spring Boot 中发出 POST 请求
- ios - drawing line using vertex shader & fragment shader in spritkit in swift
- php - php+laravel 在哪里读取 db 连接字符串,因为运行时默认为用户 ID 未在我的应用程序的任何地方定义?
- vxworks - 如何在 Vxworks 的内核 shell 中使用 ping 命令?
- c++ - 如何修复ncurses?
- javascript - 我可以在回调方法中返回一个 Vue JS 组件吗?
- c# - CefSharp 进行 POST web api 调用 Win Forms c#