JavaScript替换JSON对象内指定字符串仅返回值数组如何修复?
错误原因
- 你使用的
map是数组方法,Object.keys(obj).map()执行后会返回仅包含处理后值的数组,你直接将原对象obj赋值为这个数组,自然丢失了原对象的键结构。 - 原有逻辑中
replace('$name', 'John')只会替换字符串中第一个出现的$name,如果单个属性值存在多个$name会替换不全,且额外的includes判断属于冗余逻辑:字符串不存在$name时replace会直接返回原字符串,不需要提前判断。
修复方案
方案1:用reduce生成新对象(推荐,不污染原对象)
var obj = { "name": "name is $name", "work": "$name is doctor", "maritial status": "unmarried" }; obj = Object.keys(obj).reduce(function (acc, key) { // 用正则/g实现全局所有$name的替换 acc[key] = obj[key].replace(/\$name/g, 'John'); return acc; }, {}); console.log(obj);
执行后输出完整对象:
{ "name": "name is John", "work": "John is doctor", "maritial status": "unmarried" }
方案2:直接遍历修改原对象
var obj = { "name": "name is $name", "work": "$name is doctor", "maritial status": "unmarried" }; for (const key in obj) { // 过滤原型链继承的属性 if (obj.hasOwnProperty(key)) { obj[key] = obj[key].replace(/\$name/g, 'John'); } } console.log(obj);
内容的提问来源于stack exchange,提问作者Rakesh
相关产品推荐
相关产品推荐

