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

JSON对象引用实现咨询:如何在给定前端代码中完成引用操作

实现JSON/JS对象的引用功能方案

嘿,我来帮你搞定这个问题!首先得明确:原生JSON字符串本身不支持引用功能,但在JavaScript对象中,我们可以通过几种简单的方式实现复用/引用,完美适配你的前端代码场景。下面结合你的代码给出具体方案:

方法1:提取共用变量直接引用(最常用)

把需要重复使用的内容抽成独立变量,然后在对象定义中直接引用,这样既减少重复代码,后续修改也只需改一处。

修改你的代码如下:

<p id="demo"></p>
<p id="options"></p>
<script>
// 先定义共用的变量
const correctBasketballAnswer = "Huston Rocket";
const commonMathOptions = ["10", "11", "12", "13"];

var myObj;
myObj = {
  "quiz": {
    "sport": {
      "q1": {
        "question": "Which one is correct team name in NBA?",
        "options": [
          "New York Bulls",
          "Los Angeles Kings",
          "Golden State Warriros",
          correctBasketballAnswer // 引用预定义变量
        ],
        "answer": correctBasketballAnswer // 再次引用
      }
    },
    "maths": {
      "q1": {
        "question": "5 + 7 = ?",
        "options": commonMathOptions, // 引用共用选项数组
        "answer": "12"
      }
    }
  }
};

// 渲染到页面
document.getElementById("demo").innerHTML = 
  `${myObj.quiz.sport.q1.question}<br>正确答案:${myObj.quiz.sport.q1.answer}`;
document.getElementById("options").innerHTML = 
  `${myObj.quiz.maths.q1.question}<br>选项:${myObj.quiz.maths.q1.options.join(", ")}`;
</script>

方法2:引用对象内部已有的属性

如果需要引用同一个对象内的其他属性,可以在对象创建后赋值,或者用getter函数实时获取:

方式A:创建对象后手动引用

// 创建对象后,让maths的q1答案引用sport q1的第四个选项
myObj.quiz.maths.q1.answer = myObj.quiz.sport.q1.options[3];

方式B:用getter函数动态引用

myObj = {
  "quiz": {
    "sport": {
      "q1": {
        "question": "Which one is correct team name in NBA?",
        "options": [
          "New York Bulls",
          "Los Angeles Kings",
          "Golden State Warriros",
          "Huston Rocket"
        ],
        "answer": "Huston Rocket"
      }
    },
    "maths": {
      "q1": {
        "question": "5 + 7 = ?",
        "options": ["10", "11", "12", "13"],
        // 用getter动态返回目标值
        get answer() {
          return this.options[2]; // 返回第三个选项"12"
        }
      }
    }
  }
};

方法3:纯JSON字符串的自定义引用解析(如果需要处理JSON字符串)

如果你的场景是处理纯JSON字符串(而非JS对象),可以自定义$ref标记,再写解析函数替换引用:

// 带自定义引用标记的JSON字符串
const myJSON = `{
  "quiz": {
    "sport": {
      "q1": {
        "question": "Which one is correct team name in NBA?",
        "options": ["New York Bulls", "Los Angeles Kings", "Golden State Warriros", "Huston Rocket"],
        "answer": "Huston Rocket"
      }
    },
    "maths": {
      "q1": {
        "question": "5 + 7 = ?",
        "options": ["10", "11", "12", "13"],
        "answer": "$ref:quiz.sport.q1.answer"
      }
    }
  }
}`;

// 解析引用的函数
function resolveReferences(obj, parent = obj) {
  for (const key in obj) {
    if (typeof obj[key] === 'string' && obj[key].startsWith('$ref:')) {
      const path = obj[key].slice(5).split('.');
      let value = parent;
      for (const part of path) {
        value = value[part];
      }
      obj[key] = value;
    } else if (typeof obj[key] === 'object' && obj[key] !== null) {
      resolveReferences(obj[key], parent);
    }
  }
  return obj;
}

// 使用解析函数
const parsedObj = resolveReferences(JSON.parse(myJSON));
console.log(parsedObj.quiz.maths.q1.answer); // 输出:Huston Rocket

内容的提问来源于stack exchange,提问作者flash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:05:59