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

如何访问对象中索引数组的键值以实现内容展示?

问题分析与修复

核心问题

你代码里的两个关键错误:

  • forEach循环中的writer是对象的键名字符串(比如"abitbol"),不是对应的数据对象,直接访问writer.quote、writer.name自然拿不到值。
  • karamazov项的结构和其他项不统一,其他项是{name: 作者名, quote: 引用内容},但它是{"Serge Karamazov": 引用内容},需要单独处理或者调整结构。

修复方案

步骤1:统一数据结构(可选但推荐)

先把karamazov的结构改成和其他项一致,避免额外的判断逻辑:

var quotes = {
  karamazov: [{
    name: "Serge Karamazov",
    quote: "Barrez vous **** de mimes."
  }],
  abitbol: [{
    name: "Georges Abitbol",
    quote: "Le train de tes injures roule sur le rail de mon indifférence.",
  }],
  bath: [{
    name: "Hubert Bonisseur de la Bath",
    quote: "Ça ne prenait pas beaucoup plus de temps.",
  }],
  moulinier: [{
    name: "Moulinier ",
    quote: "L'habit ne fait pas le moine, mais il fait l'agent... Même non titularisé.",
  }],
  welles: [{
    name: "Orson Welles",
    quote: "C'est du vol et du plagiat. j'aime pas trop les voleurs et...",
  }],
};

步骤2:修正循环中的数据访问逻辑

通过quotes[writer]拿到对应数组,再取数组第一个元素(因为每个属性都是长度为1的数组),然后访问它的name和quote:

const quotesWrap = document.querySelector('#quotes-wrap');

Object.keys(quotes).forEach(function(key) {
  // 拿到当前键对应的数组,取第一个元素
  const quoteData = quotes[key][0];
  
  const citationWrap = document.createElement("div");
  quotesWrap.appendChild(citationWrap);
  const citation = document.createElement("p");
  const auteur = document.createElement("p");
  citationWrap.appendChild(citation);
  citationWrap.appendChild(auteur);

  citationWrap.classList.add("quote");
  citation.classList.add("citation");
  auteur.classList.add("auteur");

  // 访问quoteData里的属性
  citation.innerHTML = `"${quoteData.quote}"`;
  auteur.innerHTML = quoteData.name;
});

如果不想修改karamazov的结构

可以在循环里加判断处理这种特殊结构:

Object.keys(quotes).forEach(function(key) {
  const quoteData = quotes[key][0];
  let name, quote;
  
  // 处理karamazov的特殊结构
  if (Object.keys(quoteData).length === 1 && !quoteData.name) {
    const [authorName] = Object.keys(quoteData);
    name = authorName;
    quote = quoteData[authorName];
  } else {
    name = quoteData.name;
    quote = quoteData.quote;
  }
  
  // 后续创建元素和赋值逻辑不变
  const citationWrap = document.createElement("div");
  quotesWrap.appendChild(citationWrap);
  const citation = document.createElement("p");
  const auteur = document.createElement("p");
  citationWrap.appendChild(citation);
  citationWrap.appendChild(auteur);

  citationWrap.classList.add("quote");
  citation.classList.add("citation");
  auteur.classList.add("auteur");

  citation.innerHTML = `"${quote}"`;
  auteur.innerHTML = name;
});

效果说明

修复后,每个引用的作者和内容都会正确渲染到页面的#quotes-wrap容器中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:53:13