发现一个诡异的问题,各位同胞帮忙看看
内容有点多,问题比较复杂,还希望各位慢慢看。 最近用node做一个手游项目,做服务端,因为策划会给过来一些配置表,于是乎我让策划把表成如下格式(json) presentHero.json
//所有策划给过来的配置表格式都是这样的,里面有很多条数据,这里方便我就只弄了两条。
[
[
"英雄id",
"初始星级",
"最大星级"
],
[
"index",
"starMin",
"starMax"
],
[
100008,
1,
4
],
[
100009,
1,
4
]
]
上面的表就是一个json文件,我通过代码把它转化成一Objcect,转换后的Object结构如下:
{
"data": {
"100008": {
"index": 100008,
"starMin": 1,
"starMax": 4
},
"100009": {
"index": 100009,
"starMin": 1,
"starMax": 4
}
},
"ids": [
100008,
100009
]
}
转化代码如下: dataParase.js
var presentHero = require('./data/presentHero.json');
var Data = function (data) {
var fields = {};
data[1].forEach(function (i, k) {
fields[i] = k;
});
data.splice(0, 2);
var result = {}, ids = [], item;
data.forEach(function (k) {
item = mapData(fields, k);
result[item.index] = item;
ids.push(item.index);
});
this.data = result;
this.indexs = ids;
};
/**
* map the array data to object
* @return {Object} result
* @api private
*/
var mapData = function (fields, item) {
var obj = {};
for (var k in fields) {
obj[k] = item[fields[k]];
}
return obj;
};
/**
* find item by id *
* @param id
* @api public
*/
Data.prototype.findById = function (id) {
return this.data[id];
};
module.exports = {
presentHero: new Data(presentHero)
};
//上面文件把对应的json文件解析成Object之后,每个Object带两个属性,一个data(是Object,包含json里的所有数据),一个ids(是Array,只包含json文件里所有index项的值)
调用 test.js
var dataParase = require('./dataParase');
var findHero = dataParase.presentHero.findById(100008);//这里根据不同的id可以拿到不同的英雄对象。
现在的问题是,项目基本做完上线测试了,发现有时候 拿到的 findHero(即上面f的indHero为undefined),开始以为是给的id不对,后来,查日志发现,是dataParase.presentHero这个presentHero对象里有时候会丢掉几个值,即假如就拿我上面的presentHero.json文件里面给了10008,,10009两个,但有时候我查日志发现presentHero对象的data对象里只有10008一个或者只有10009一个,但是ids数组里10008,10009都有。出现这种情况的几率很小。想问问这什么原因导致的? 我改如何查?