我真的很困惑一个数组即时制作,它有点令人困惑,但我相信这是我接近我想要做的唯一方法。
我的想法是将getImageData存储在一个数组中,这样我就可以将每个图像链接到一个数据数组。
这就是我创建数组的方式:
var listObj = {
id: uid,
extra: [
ctx2.getImageData(abposx,abposy,imgwidth,imgheight)
]
};
pixeld.push(listObj);
所以现在我试图通过数组“pixeld”来找到uid,但我不知道语法应该如何....这就是我试过的:
for (j = (pixeld.length-1); j > -1; --j){
if(pixeld[j].extra.data[3] !==0){ //line 220
matches.push(pixeld[j].id);
}
}
问题是我收到此错误:
Uncaught TypeError: Cannot read property '3' of undefined on line 220
我在for循环中标记了哪一行是220。
任何人都知道我的错误是什么?
答案 0 :(得分:1)
所以你的结构如下所示:
var pixeld = []; // an Array
var listObj = {}; //an Object
listObj = { // literal notation
id : uid,
extra : [ ctx2.getImageData(abposx,abposy,imgwidth,imgheight) ]
}
现在的问题是:ctx.2.getImageData()
返回的是什么?你需要澄清一下。
直到pixeld[j].extra
一切正常,但没有data
- 属性。如果getImageData()
确实返回一个数组,那么您应该可以像这样访问:
pixeld[j].extra[3]
答案 1 :(得分:1)
问题在于您尝试将.extra
作为对象引用,但是您将其声明为内部具有单个值的数组(ctx2.getImageData
返回的内容)。
只需删除[]
函数调用周围的虚假ctx2.getImageData
,您就可以修复它。