2012-10-16 166 views
1

我尝试检索数组中的en元素的索引。Javascript indexOf()总是返回-1

这工作完全

 var onCreate = function (event) { 
     console.assert(markers[markerId] === undefined); 

     var markerId = event.markerId; 
     markers[markerId] = {}; 

     var marker = markers[markerId]; 
     // create the container object 
     marker.object3d = new THREE.Object3D(); 
     marker.object3d.matrixAutoUpdate = false; 
     scene.add(marker.object3d); 

     //UPDATE ARRAY HOLDING CURRENT MARKERS 
     console.log("ON CREATE"); 
     console.log("current detected markers: " + currentMarkers); 
     var idx = currentMarkers.indexOf(markerId); // Find the index 
     console.log("marker " + event.markerId + " has index: " + idx); 
     if(idx==-1) // if does not exist 
      currentMarkers.push(markerId); 

但这并不...

var onDelete = function (event) { 

     console.assert(markers[event.markerId] !== undefined); 
     var markerId = event.markerId; 
     //UPDATE ARRAY HOLDING CURRENT MARKERS 
     console.log("ON DELETE"); 
     console.log("current detected markers: " + currentMarkers); 
     var idxx = currentMarkers.indexOf(markerId); // Find the index 
     console.log("marker " + markerId + " has index: " + idxx); 
     if(idxx != -1) {// if DOES exist 
      currentMarkers.splice(idxx, 1); //Delete 
      var idxxx = currentMarkersCoverChecked.indexOf(markerId); // Find the index 
      if(idxxx == -1) // if does NOT exist, so if not being checked 
       checkMarkerCovered(markerId); 
     } 
     onDeleteRandom(markerId); 
     var marker = markers[markerId]; 
     scene.remove(marker.object3d); 
     delete markers[markerId]; 

看看我的控制台输出:

ON CREATE 
current detected markers: 2,1,4 
marker 3 has index: -1 
ON CREATE main.js:266 
current detected markers: 2,1,4,3 
marker 4 has index: 2 
ON DELETE 
current detected markers: 2,1,4,3 
marker 2 has index: -1 
ON CREATE 
current detected markers: 2,1,4,3 
marker 2 has index: 0 
ON DELETE 
current detected markers: 2,1,4,3 
marker 1 has index: -1 
+0

哪个'indexOf'是“不工作”?什么是'currentMarkersCoverChecked'?什么是“标记”? – jbabey

+0

第二个(On Delete)总是返回-1。但是你可以看到数组确实包含了元素。 – Thomas

+0

currentMarkersCoveredChecked永远不会到达,b/c其他indexOf总是返回-1(错误地) – Thomas

回答

0

第二个例子是行不通的,因为currentMarkersCoverChecked没有定义。

+0

问题出在currentMarkers,而不是currentMarkersCoverChecked。另外它们都被定义为全局变量。 – Thomas

1

你检查过的值的类型markerId

JavaScript的数组允许你插入Integer类型以及String类型和Object型到Array。如果某个值是Integer类型,并且您尝试indexOf("stringvalue");您可能会得到-1 as return value

希望这可以帮助您解决问题!