首先,我有一个数据库,其中包含我正在创建的游戏的地图数据。我页面上的脚本使用JSON从数据库中检索一定数量的数据并将其存储在数组中。
检索数据时,它会通过一个函数来找出在该特定区域中使用了多少个单独的图块。这是代码:
var xmlhttp = new XMLHttpRequest;
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
var map = JSON.parse(xmlhttp.responseText);
var mapTiles = new Array;
for(var count = 0; count < map.length; count ++){
if(map[count]){
if(map[count]['tile'] in mapTiles == false){
mapTiles.push(map[count]['tile']);
}
}
}
alert(mapTiles);
}
}
每次脚本查找mapTiles数组中尚未存在的图块号时,都会将其添加到该图块号中。
当前,该脚本正在获取1024条记录,除一个记录外,所有记录均包含图块值“ 1”,而另一个包含图块值“ 2”。这意味着当我警告mapTiles数组时,它应显示为“ 1、2”,而应显示为“ 1、1、2”。因此,脚本中有一个小错误,但我找不到它。
最佳答案
in operator检查对象是否具有命名属性或在数组索引处是否包含元素。在您的情况下,检查始终为false,因为第一次没有元素,因此它返回false。当mapTiles包含1
时,它位于第零个位置,因此检查返回false。当您检查2
时,最后一个元素位于第一个位置,因此它返回false。您需要遍历数组并检查元素的值,而不是使用in
运算符。
function contains( obj, aray )
{
for (var i = 0, len = aray.length, isIn = false; i < len && !isIn; ++i) {
isIn = aray[i] === obj;
}
return isIn;
}
...
if(!contains(map[count]['tile'],mapFiles)){
mapTiles.push(map[count]['tile']);
}
关于javascript - 功能略有误算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3022018/