Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不能访问数组中的对象,只能访问对象本身_Javascript_Arrays_Node.js_Object_For Loop - Fatal编程技术网

Javascript 不能访问数组中的对象,只能访问对象本身

Javascript 不能访问数组中的对象,只能访问对象本身,javascript,arrays,node.js,object,for-loop,Javascript,Arrays,Node.js,Object,For Loop,我有以下代码,在循环中创建对象,然后访问它们的值。现在我来讨论这个问题,访问对象本身是可以的,但不访问包含对象的数组。我是不是遗漏了什么 camList = new Array(); for (var i=0; i<8; i++) { var camObj = new Camera(i); camList.push(camObj); console.log(camObj.id); //this works console.log(camList[i

我有以下代码,在循环中创建对象,然后访问它们的值。现在我来讨论这个问题,访问对象本身是可以的,但不访问包含对象的数组。我是不是遗漏了什么

camList = new Array();

for (var i=0; i<8; i++)
{
    var camObj = new Camera(i);
    camList.push(camObj);
    console.log(camObj.id);     //this works
    console.log(camList[i].id); //this doesnt
}
主要代码:

var cv      = require("opencv-node");
var Camera  = require("./cameraModule").Camera;
var camList = new Array();

for (var i=0; i<8; i++)
{
    var capture = new cv.VideoCapture();
    capture.open(i);

    if (capture.isOpened())
    {
        var camObj = new Camera(i, capture);
        camList.push(camObj);
        console.log(camList[i].id); //Here is the problem
    }
}
var-cv=require(“opencv节点”);
var摄像机=需要(“./cameraModule”)。摄像机;
var camList=新数组();

对于(var i=0;i请确保
camList
在循环开始之前为空数组:

var camList = [];
for (var i = 0; i < 8; i++) {
    var camObj = new Camera(i);
    camList.push(camObj);
    console.log(camObj.id);
    console.log(camList[i].id);
}
var-camList=[];
对于(变量i=0;i<8;i++){
var camObj=新摄像机(i);
camList.push(camObj);
控制台日志(camObj.id);
console.log(camList[i].id);
}

在循环开始之前,确保
camList
为空数组:

var camList = [];
for (var i = 0; i < 8; i++) {
    var camObj = new Camera(i);
    camList.push(camObj);
    console.log(camObj.id);
    console.log(camList[i].id);
}
var-camList=[];
对于(变量i=0;i<8;i++){
var camObj=新摄像机(i);
camList.push(camObj);
控制台日志(camObj.id);
console.log(camList[i].id);
}

在每个循环迭代中,您都在检查
捕获.isOpened()
。如果这是
false
,会发生什么

循环将继续,而不会将某些内容推入
camList
。在下一个循环中,
i
将递增。比方说
capture.isOpened()
将变为
true
。当插入数组时,
i
将不会与刚才添加的元素对齐。
i
将是一个(或多个)索引太大了

请尝试执行以下操作,而不是执行
camList[i].id

camList[camList.length - 1].id

在每个循环迭代中,您都在检查
capture.isOpened()
。如果这是
false
,会发生什么

循环将继续,而不会将某些内容推入
camList
。在下一个循环中,
i
将递增。比方说
capture.isOpened()
将变为
true
。当插入数组时,
i
将不会与刚才添加的元素对齐。
i
将是一个(或多个)索引太大了

请尝试执行以下操作,而不是执行
camList[i].id

camList[camList.length - 1].id


它是如何工作的?发生了什么?你在哪里定义了
camList
?你确定你的
i
与其索引对齐吗?如果你
console.log(camList),你会看到什么是的,我们需要查看创建
var-camList
的早期代码。如果您之前按下它,索引将已经超过当前基于零的
i
值。如果您希望索引对齐,可能您的意思是
camList[i]=camObj;
@Fidel90:这里有一个提示,如果
capture.isOpened()
是否为
false
?与
camList
中有多少项相关的
i
在哪里?它是如何工作的?发生了什么?你在哪里定义
camList
?你确定你的
i
与其索引对齐吗?如果你使用
console.log(camList),你会看到什么是的,我们需要查看创建
var-camList
的早期代码。如果您之前按下它,索引将已经超过当前基于零的
i
值。如果您希望索引对齐,可能您的意思是
camList[i]=camObj;
@Fidel90:这里有一个提示,如果
capture.isOpened()
是否为
false
?与
camList
中有多少项相关,
i
在哪里?@funkurm:当问题第一次发布时,该行不在其中。@funkurm:当问题第一次发布时,该行不在其中。嗯,这应该如您所说。我想创建一个只包含ob的数组可以打开捕获的对象(capture.isOpend())。我正在将当前循环变量传递给我的对象,但对象本身在创建它的数组中有不同的索引。@Fidel90:那么不要使用
.push()
,它会添加到数组的末尾,不管该索引是什么。我想您应该手动设置索引。请尝试:
camList[I]=camObj
。但这正是我使用push的原因。我知道在这里不容易理解我的意图:)顺便说一句:camList[camList.length-1]。id有效,必须再次查看我的代码:)谢谢您!很高兴我能帮忙:-德威尔,这应该是你说的工作。我想创建一个数组,该数组只包含可以打开捕获的对象(capture.isOpend())。我正在将当前循环变量传递给我的对象,但对象本身在创建它的数组中有不同的索引。@Fidel90:那么不要使用
.push()
,它会添加到数组的末尾,不管该索引是什么。我认为您需要手动设置索引。试试:
camList[i]=camObj
。但这正是我使用push的原因。我知道在这里很难理解我的意图:)顺便说一句:camList[camList.length-1]。id有效,必须再次查看我的代码:)谢谢您!很高兴我能帮忙