如何将JSON对象数组中的字符串属性值通过parseFloat转换为数值并生成新数组?已尝试实现但未成功
我来帮你搞定这个问题!你的代码里有几个小问题导致转换没成功,我给你拆解一下,然后给出修复后的方案~
你代码里的核心问题
- 用到的
res变量完全没定义,赋值时肯定会报错,这是最直接的原因; - 没有为每个原JSON对象创建对应的新对象,直接操作不存在的变量当然行不通;
- 用
for...in遍历数组虽然能跑,但数组更推荐用for...of或者Array.map(),写法更清晰也更安全。
解决方案1:只转换指定属性(最符合你“部分属性转换”的需求)
如果你只想把cost和discount转成数值,其他属性保留原样,可以这么写:
const originalJson = [{ "id" : "0", "msg" : "hi", "cost" : "250.24", "discount": "10" }, { "id" : "1", "msg" : "there", "cost" : "45.00", "discount": "0" }]; const convertedJson = originalJson.map(item => { // 先复制原对象的所有属性,避免修改原数据 const newItem = {...item}; // 针对性转换指定属性 newItem.cost = parseFloat(newItem.cost); newItem.discount = parseFloat(newItem.discount); // 要是担心转换失败(比如属性值不是合法数字),可以加个判断兜底: // newItem.cost = !isNaN(parseFloat(newItem.cost)) ? parseFloat(newItem.cost) : newItem.cost; return newItem; }); console.log(convertedJson);
解决方案2:自动转换所有可转成数值的属性
如果想让所有能转成数字的字符串属性自动转成数值,其他属性保留字符串,可以用这个写法:
const originalJson = [{ "id" : "0", "msg" : "hi", "cost" : "250.24", "discount": "10" }, { "id" : "1", "msg" : "there", "cost" : "45.00", "discount": "0" }]; const convertedJson = originalJson.map(item => { const newItem = {}; for (const prop in item) { if (item.hasOwnProperty(prop)) { const parsedValue = parseFloat(item[prop]); newItem[prop] = isNaN(parsedValue) ? item[prop] : parsedValue; } } return newItem; }); console.log(convertedJson);
你的原始代码修复版
要是你想保留自己原来的循环逻辑,修复后的代码是这样的:
var json = [{ "id" : "0", "msg" : "hi", "cost" : "250.24", "discount": "10" }, { "id" : "1", "msg" : "there", "cost" : "45.00", "discount": "0" }]; var json1 = []; // 用普通for循环遍历数组更稳妥 for (let i = 0; i < json.length; i++) { // 为每个原对象创建新的对象副本 const newObj = {...json[i]}; for (const prop in newObj) { const parsed = parseFloat(newObj[prop]); newObj[prop] = isNaN(parsed) ? newObj[prop] : parsed; } // 将处理好的新对象推入新数组 json1.push(newObj); } console.log(json1);
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

