如何用JavaScript在含JSON对象的变量上用map实现金额格式化
解决JavaScript中map调用报错'totalOfPurchasedNested不是函数'的问题
嘿,我来帮你搞定这个报错问题!你遇到的'totalOfPurchasedNested不是函数'错误,核心原因很简单:totalOfPurchasedNested并不是一个数组,而是单个的金额字符串(或数值),而map()是数组专属的方法,直接在非数组类型上调用就会抛出这个错误。从你期望的输出格式也能看出来,每个产品对应的金额是单个数值,根本不需要用map来处理。
问题代码分析
你原来的代码里,totalOfPurchased[j].totalOfPurchased应该是类似"26.901,97"这样的单个金额字符串,而不是数组。所以直接调用map()肯定会报错。
修正后的代码
把原来的map调用改成直接处理单个值的逻辑就行,同时还要考虑数值类型的兼容:
for (var j = 0; j < totalOfPurchased.length; j++) { // 声明包含扩展详情的变量 var purchasedProductNested = totalOfPurchased[j].purchasedProduct; var quantityOfPurchasedNested = totalOfPurchased[j].quantityPurchased; var totalOfPurchasedNested = totalOfPurchased[j].totalOfPurchased; var totalDiscountsPurchasedNested = totalOfPurchased[j].discountsToConsider; // 修正:直接处理单个金额值,替换千分位和小数点格式,转成数值 if (typeof totalOfPurchasedNested === 'string') { // 先移除所有千分位的点,再把逗号替换成标准小数点,最后转成浮点数 totalOfPurchasedNested = parseFloat(totalOfPurchasedNested.replace(/\./g, "").replace(",", ".")); } // 构造包含扩展详情的JSON对象 var allResponseTwoWithExtendDetails = { product: purchasedProductNested, quantity: quantityOfPurchasedNested, totalPurchased: totalOfPurchasedNested, totalDiscounts: totalDiscountsPurchasedNested }; // 将对象推入原生数组 receivedDataOne.push(allResponseTwoWithExtendDetails); }
说明
- 这段代码会先判断
totalOfPurchasedNested是否是字符串类型,如果是就处理格式:移除千分位的.,把作为小数点的,换成标准的.,最后转成浮点数。 - 如果
totalOfPurchasedNested本身已经是数值类型,代码会跳过处理逻辑,避免出错。 - 处理后得到的
totalPurchased就是你期望的数值格式(比如26901.97),可以直接用于产品销量分组统计的计算。
内容的提问来源于stack exchange,提问作者smachs
相关产品推荐
相关产品推荐

