You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:57:03