关联数组查找(来自Three.js中的代码)

时间:2012-11-02 20:18:03

标签: javascript three.js associative-array

我正在查看three.js中的代码,特别是用于创建球体的THREE.SphereGeometry方法: https://github.com/mrdoob/three.js/blob/master/src/extras/geometries/SphereGeometry.js

有两组循环 - 我正在看第二组循环。

我的问题是: 创建了一个数组数组,称为顶点。在这个数组中添加了对象数组。

稍后,使用索引检索单个对象,具体为:

var v1 = vertices[ y ][ x + 1 ];

然后,就在这之下,似乎再次引用该对象,但是通过以下语法:

var n1 = this.vertices[ v1 ].clone().normalize();

尽我所能,这对我来说似乎是一个错误..不会this.vertices[v1]返回undefined?

2 个答案:

答案 0 :(得分:3)

认为导致这种混淆的原因是this.vertices vs vertices。它们实际上是两种不同的结构。

// first loop
for (...) {
    /* ... */

    // this.verticies will have every vertex
    this.vertices.push( vertex );

    verticesRow.push( this.vertices.length - 1 );
    /* ... */
}

// notice we pushed a row of vertices to `vertices` not `this.verticies`
vertices.push( verticesRow );


// second loop
for (...)  for (...) {
    // grab the vertex from the local list
    var v1 = vertices[ y ][ x + 1 ];

    // use it to grab something from the object's list
    var n1 = this.vertices[ v1 ].clone().normalize();
}

答案 1 :(得分:0)

我不知道这个具体的例子,但是这里有一个有效的数据结构,不一定是错误。

x = 1
y = 2

vertices = ["","",["","x",3],"the third element"]

var v1 = vertices[y][x+1] // v1 is `3`

var n1 = this.vertices[v1]

alert(n1)
// alerts `the third element`