我试图从javascript中的数组中删除特定项,但似乎无法使array.splice函数工作。
此代码用于检查SVG对象是否与另一个对象发生冲突(用于游戏)。玩家总是希望有3个与之交叉的对象,因此我希望将这些对象从列表中删除。
到目前为止我的代码是:
svg=document.getElementById("canvas");
function checkcollision(){
var r0=document.getElementById("rhb1").getBoundingClientRect(), r1=svg.createSVGRect(); r1.x=r0.left; r1.y=r0.top; r1.width=r0.width; r1.height=r0.height;
var collisions=svg.getIntersectionList(r1,null), len=collisions.length;
console.log(collisions);
for(i=len-1;i>=0;i--){
if(collisions[i].id=="renclosure"||collisions[i].id=="cplayer"||collisions[i].id=="rhb1"){
collisions.splice(i,1);
}
}
console.log(collisions);
if(collisions.length>0){
return true;
}
else{
return false;
}
}控制台显示的冲突数组的示例是
[<rect id="renclosure" x="0" y="0" width="15360" height="8640" class="st0"></rect>, <circle id="cplayer" cx="960" cy="540" r="50" class="st1"></circle>, <rect id="rhb1" x="0" y="0" width="100" height="100" class="st2" transform="translate(910, 490) rotate(0 050 050)"></rect>](直接复制)。
然而,谷歌Chrome每次都会抛出一个错误“未登录的TypeError: collisions.splice不是一个函数”,我不明白为什么(或者如何修复)。
发布于 2016-08-17 10:28:50
您的collisions不是Array类型的
试着使用
Array.prototype.splice.call(collisions, i, 1)。
那splice.call()呢,看这里,Function.prototype.call
发布于 2016-08-17 10:32:25
根据https://developer.mozilla.org/en/docs/Web/API/SVGSVGElement,getIntersectionList的结果不是数组,而是NodeList。
但是,您可以通过以下调用将NodeList转换为Array:var div_array = Array.prototype.slice.call(div_list); // converts NodeList to Array
这里有更多的信息:https://developer.mozilla.org/en-US/docs/Web/API/NodeList
https://stackoverflow.com/questions/38994015
复制相似问题