首页 > 解决方案 > 如何在 JavaScript 中访问嵌套数组中的属性?

问题描述

我有一个嵌套数组存储在一个 JSON 文件中,像这样......

{
  "shabadinfo": {
    "id": "1",
    "pageno": "1",
    "source": {
      "id": "G",
      "gurmukhi": "sRI gurU gRMQ swihb jI",
      "unicode": "ਸ੍ਰੀ ਗੁਰੂ ਗ੍ਰੰਥ ਸਾਹਿਬ ਜੀ",
      "english": "Sri Guru Granth Sahib Ji",
      "pageno": "1"
    },
    "raag": {
      "id": "1",
      "gurmukhi": "jp",
      "unicode": "ਜਪ",
      "english": "Jap",
      "startang": null,
      "endang": null,
      "raagwithpage": "Jap (1-8)"
    },
    "writer": {
      "id": "1",
      "gurmukhi": "mÚ 1",
      "unicode": null,
      "english": "Guru Nanak Dev Ji"
    }
  },
  "navigation": {
    "next": "2"
  },
  "gurbani": [{
      "shabad": {
        "id": "1",
        "gurbani": {
          "gurmukhi": "<> siq nwmu krqw purKu inrBau inrvYru Akwl mUriq AjUnI sYBM gur pRswid ]",
          "unicode": "ੴ ਸਤਿ ਨਾਮੁ ਕਰਤਾ ਪੁਰਖੁ ਨਿਰਭਉ ਨਿਰਵੈਰੁ ਅਕਾਲ ਮੂਰਤਿ ਅਜੂਨੀ ਸੈਭੰ ਗੁਰ ਪ੍ਰਸਾਦਿ ॥",
          "searchInputFirstEnglish": "<>snkpnnAmAsgp",
          "searchInputFirstGurmukhi": "ੴਸਨਕਪਨਨਅਮਅਸਗਪ"
        },
        "larivaar": {
          "gurmukhi": "<>siqnwmukrqwpurKuinrBauinrvYruAkwlmUriqAjUnIsYBMgurpRswid]",
          "unicode": "ੴਸਤਿਨਾਮੁਕਰਤਾਪੁਰਖੁਨਿਰਭਉਨਿਰਵੈਰੁਅਕਾਲਮੂਰਤਿਅਜੂਨੀਸੈਭੰਗੁਰਪ੍ਰਸਾਦਿ॥"
        },
        "translation": {
          "english": {
            "ssk": "One Universal Creator God. The Name Is Truth. Creative Being Personified. No Fear. No Hatred. Image Of The Undying, Beyond Birth, Self-Existent. By Guru's Grace ~"
          },
          "punjabi": {
            "bms": {
              "gurmukhi": "Akwl purK ie`k hY, ijs dw nwm 'hoNd vwlw' hY jo isRStI dw rcnhwr hY, jo sB ivc ivAwpk hY, BY qoN rihq hY, vYr-rihq hY, ijs dw srUp kwl qoN pry hY, (Bwv, ijs dw srIr nws-rihq hY), jo jUnW ivc nhIN AwauNdw, ijs dw pRkwS Awpxy Awp qoN hoieAw hY Aqy  jo siqgurU dI ikrpw nwl imldw hY[",
              "unicode": "ਅਕਾਲ ਪੁਰਖ ਇੱਕ ਹੈ, ਜਿਸ ਦਾ ਨਾਮ 'ਹੋਂਦ ਵਾਲਾ' ਹੈ ਜੋ ਸ੍ਰਿਸ਼ਟੀ ਦਾ ਰਚਨਹਾਰ ਹੈ, ਜੋ ਸਭ ਵਿਚ ਵਿਆਪਕ ਹੈ, ਭੈ ਤੋਂ ਰਹਿਤ ਹੈ, ਵੈਰ-ਰਹਿਤ ਹੈ, ਜਿਸ ਦਾ ਸਰੂਪ ਕਾਲ ਤੋਂ ਪਰੇ ਹੈ, (ਭਾਵ, ਜਿਸ ਦਾ ਸਰੀਰ ਨਾਸ-ਰਹਿਤ ਹੈ), ਜੋ ਜੂਨਾਂ ਵਿਚ ਨਹੀਂ ਆਉਂਦਾ, ਜਿਸ ਦਾ ਪ੍ਰਕਾਸ਼ ਆਪਣੇ ਆਪ ਤੋਂ ਹੋਇਆ ਹੈ ਅਤੇ  ਜੋ ਸਤਿਗੁਰੂ ਦੀ ਕਿਰਪਾ ਨਾਲ ਮਿਲਦਾ ਹੈ।"
            }
          },
          "spanish": "Un sólo Creador Universal, Verdad es Su Nombre. Creativa Su Personalidad. Sin Miedo, sin Venganza. Inmortal, Sin Principio, Sin Fin, Auto Existente. Por la Gracia del Verdadero Guru."
        },
        "transliteration": "ikOankaar sat naam karataa purakh nirabhau niravair akaal moorat ajoonee saibha(n) gur prasaadh ||",
        "shabadid": "1",
        "pageno": "1",
        "lineno": "1",
        "updated": "2019-01-31 21:40:51",
        "firstletters": {
          "ascii": ",060,115,110,107,112,110,110,065,109,065,115,103,112,",
          "english": "<>snkpnnAmAsgp"
        },
        "bisram": {
          "sttm": null,
          "igurbani1": null,
          "igurbani2": null
        }
      }
    },
{
      "shabad": {
        "id": "2",
        "gurbani": {
          "gurmukhi": "] jpu ]",
          "unicode": "॥ ਜਪੁ ॥",
          "searchInputFirst": "j"
        },
        "larivaar": {
          "gurmukhi": "]jpu]",
          "unicode": "॥ਜਪੁ॥"
        },
        "translation": {
          "english": {
            "ssk": "Name of the Composition, \"Jup\". Chant And Meditate:"
          },
          "punjabi": {
            "bms": {
              "gurmukhi": "ies swrI bwxI dw nwm 'jpu' hY [",
              "unicode": "ਇਸ ਸਾਰੀ ਬਾਣੀ ਦਾ ਨਾਮ 'ਜਪੁ' ਹੈ ।"
            }
          },
          "spanish": "Canta y medita en esto,"
        },
        "transliteration": "|| jap ||",
        "shabadid": "1",
        "pageno": "1",
        "lineno": "3",
        "updated": "2019-01-31 21:40:51",
        "firstletters": {
          "ascii": ",106,",
          "english": "j"
        },
        "bisram": {
          "sttm": "",
          "igurbani1": "",
          "igurbani2": ""
        }
      }
    },

您可以忽略那里的其他实际语言,它不相关,它只是一个字符串。这只是其中的一小部分,它是一个相当大的文件。

我设法很好地访问了每个属性,然后重新分配了新属性,以便我可以在我的 javascript 中引用它们。

for (var iD = 0; iD < data.gurbani.length; iD++) {
    items.push({
      shabadId: data.gurbani[iD].shabad.shabadid,
      id: data.gurbani[iD].shabad.id,
      title: data.gurbani[iD].shabad.gurbani.unicode,
      subtitle: data.gurbani[iD].shabad.translation.english.ssk,
      searchInput: data.gurbani[iD].shabad.firstletters.english
      // data.gurbani[iD].shabad.gurbani.searchInputFirstGurmukhi
    });

我的问题是,我现在需要访问,例如,“副标题”属性(可以是其中任何一个),以便现在可以读取“副标题”下的所有字符串/对象,以便我可以做其他事情将它们放在 for 循环之外。

顺便说一句,一切都可以正常工作,只是能够访问循环之外的属性。内容确实写到我需要的地方等等。

我有点新手所以任何帮助将不胜感激!

标签: javascriptarraysobjectmultidimensional-array

解决方案


只需执行mapitems获得subtitles:

const allSubtitles = items.map(e => e.subtitle);

推荐阅读