如何在JSON遍历中排除非对象类型的键?代码报错求助
问题解决方法
错误原因
你当前的判断逻辑完全错了:if(data[key] != "Update_Date")是拿属性值和字符串"Update_Date"对比,但data["Update_Date"]的值是"2023-03-15 14:00:01",根本不等于"Update_Date",所以这个判断无法跳过Update_Date键。循环到它时,尝试访问data[key].Sell就会报错——因为字符串没有Sell属性。
另外你用instanceof Array无效,是因为USD、EUR这些是普通对象(Object),不是数组,所以这个判断条件永远不成立。
两种可行解决方案
方案1:直接跳过Update_Date键
最直接的方式,判断当前循环的key是否是"Update_Date",是的话直接跳过:
let t = 0; for (const key in data) { // 跳过Update_Date键 if (key === "Update_Date") continue; const sellStr = data[key].Sell; // 替换逗号为小数点后转成数字 const sellNum = parseFloat(sellStr.replace(",", ".")); t += sellNum; } console.log(t); // 输出:39.1616
方案2:通用判断(推荐)
如果以后可能新增其他非货币类型的键,用这种方式更稳妥——判断当前属性值是对象且包含Sell属性:
let t = 0; for (const key in data) { const item = data[key]; // 确保是对象且存在Sell属性 if (typeof item === "object" && item !== null && "Sell" in item) { const sellNum = parseFloat(item.Sell.replace(",", ".")); t += sellNum; } } console.log(t); // 输出:39.1616
额外说明
你代码里的parseInt(data[key].Sell);是多余的,直接用parseFloat处理即可;另外console.log(toplam);里的toplam应该是t,注意变量名拼写正确。
内容的提问来源于stack exchange,提问作者kittycat
相关产品推荐
相关产品推荐

