数组嵌套对象取值异常:调用total属性始终无结果的技术求助
问题分析与解决办法
嗨,我帮你找到问题的根源啦!你之所以用data.total或data['total']拿不到值,是因为你最终返回的data是一个数组,而不是单个对象。
看你的代码:一开始你声明了var data = [],最后把series对象push进这个数组,然后return data。这意味着函数返回的结果是[series](一个只包含series的数组),而不是series本身。数组本身并没有total属性,所以自然会报错。
两种解决思路
思路一:直接返回series对象(推荐,如果你不需要返回数组的话)
既然你最终只需要这个series对象的信息,没必要把它放进数组里返回。修改代码的最后部分即可:
// 先补全total的初始化(你原来的代码里没写,可能会导致NaN) var total = 0; var dataequipes = []; var children = response.data.children; children.forEach(function (child) { if(equipes.hasOwnProperty(child['id'])) { total += equipes[child['id']]; dataequipes.push({ id: child['id'], total: equipes[child['id']] }); } }); series.domain = domainId; series.total = total; series.details = dataequipes; // 直接返回series对象,而不是数组 return series;
这样调用函数后,直接用返回值的total属性就能拿到结果:
var result = yourFunctionName(); // 替换成你的函数名 console.log(result.total); // 正常获取total值
思路二:如果必须返回数组,调用时取数组的第一个元素
如果你因为业务需求必须返回数组,那在调用的时候要明确取数组里的第一个元素:
var result = yourFunctionName(); // 函数返回的是[series]数组 console.log(result[0].total); // 取数组第一个元素的total属性 // 或者用方括号写法 console.log(result[0]['total']);
额外提醒
注意你的代码里total变量没有初始化,建议加上var total = 0;,否则第一次累加的时候会得到NaN,导致最终的total值不正确哦。
内容的提问来源于stack exchange,提问作者Majdi Taleb
相关产品推荐
相关产品推荐

