TaffyDB循环通过变量引用id获取pos_x失败,求解决方法
解决TaffyDB循环获取pos_x的问题
嘿,我明白你遇到的麻烦了!你代码里的问题其实出在id的类型不匹配和循环变量的引用方式上,我来一步步给你拆解和解决:
问题根源分析
你的数据库里id字段是字符串类型(比如"0"、"1"),但循环里的i是数字类型(0、1)。当你用entities({id:i})查询时,TaffyDB会严格匹配类型——找id等于数字0的条目,但数据库里只有id等于字符串"0"的条目,所以自然返回空结果啦!
另外,你之前用entities_ID_array = entities().select("id")得到的是一个字符串数组["0","1"],但循环里没用到这个数组里的实际值,而是用了数字索引i,这也是问题之一。
解决方案1:用TaffyDB原生的each方法(推荐)
TaffyDB自带了each方法,可以直接遍历每一条数据,不用自己处理数组和索引,代码更简洁也不容易出错:
// 直接遍历所有实体 entities().each(function(entity) { var pos_x = entity.pos_x; alert(pos_x); // 会依次弹出"200"和"200" });
解决方案2:修正原有循环的变量引用
如果你想沿用自己的循环思路,只需要改成用entities_ID_array里的字符串id来查询,而不是数字i:
var entities_ID_array = entities().select("id"); for(var i=0; i<entities_ID_array.length; i++){ // 用数组中存储的字符串id去匹配 var pos_x = entities({id: entities_ID_array[i]}).select("pos_x"); alert(pos_x); }
解决方案3:将数字索引转为字符串
如果你不想用数组里的id,也可以把循环变量i转成字符串类型,和数据库里的id类型匹配:
var entities_ID_array = entities().select("id"); for(var i=0; i<entities_ID_array.length; i++){ // 把数字i转为字符串 var pos_x = entities({id: i.toString()}).select("pos_x"); alert(pos_x); }
这三种方法都能解决你的问题,个人最推荐第一种each方法,因为它是TaffyDB设计的原生遍历方式,代码更清晰,也能避免类型匹配的坑~
内容的提问来源于stack exchange,提问作者dathiezer
相关产品推荐
相关产品推荐

