JavaScript读取多维数组问题

问题描述 投票:0回答:1

我在 JavaScript 中读取多维数组时遇到问题。

在我的网页上,用户单击网页链接以显示另一个页面。我希望我的程序能够:

• 阅读 URL;

• 提取页面名称;

• 在多维数组中搜索页面名称;

• 显示同一页面,但文本和图像列在数组中。

为此,函数读取 JSON 文件并使用读取的数据填充多维数组:

$.getJSON('includes/pages.json', function(data) { 
                    
  nombre_appareils = 0; 
                    
  for (key in data.APPAREILS) { //Counts the entries in the JSON file.
       nombre_appareils++;
  }
                    
 for (var i = 0; i < nombre_appareils; i++) { 
       tableau_appareils[i] = [];
 }
                    
                
for (key in data.APPAREILS) {
    //Stores each entry in th .json in tableau_appareils[][].

    tableau_appareils[key]['publication'] = data.APPAREILS[key].PUBLICATION; 
    tableau_appareils[key]['url'] = data.APPAREILS[key].URL;
    tableau_appareils[key]['marque'] = data.APPAREILS[key].MARQUE;
    tableau_appareils[key]['titre'] = data.APPAREILS[key].TITRE;
    tableau_appareils[key]['sous-titre'] = data.APPAREILS[key].SOUS_TITRE;
    tableau_appareils[key]['image1'] = data.APPAREILS[key].IMAGE1;
    tableau_appareils[key]['texte-image1'] = data.APPAREILS[key].TEXTE_IMAGE1;
    tableau_appareils[key]['image2'] = data.APPAREILS[key].IMAGE2;
    tableau_appareils[key]['texte-image2'] = data.APPAREILS[key].TEXTE_IMAGE2;
    tableau_appareils[key]['image3'] = data.APPAREILS[key].IMAGE3;
    tableau_appareils[key]['texte-image3'] = data.APPAREILS[key].TEXTE_IMAGE3;
    tableau_appareils[key]['image4'] = data.APPAREILS[key].IMAGE4;
    tableau_appareils[key]['texte-image4'] = data.APPAREILS[key].TEXTE_IMAGE4;
    tableau_appareils[key]['image5'] = data.APPAREILS[key].IMAGE5;
    tableau_appareils[key]['texte-image5'] = data.APPAREILS[key].TEXTE_IMAGE5;
    tableau_appareils[key]['image6'] = data.APPAREILS[key].IMAGE6;
    tableau_appareils[key]['texte-image6'] = data.APPAREILS[key].TEXTE_IMAGE6;
    tableau_appareils[key]['image7'] = data.APPAREILS[key].IMAGE7;
    tableau_appareils[key]['texte-image7'] = data.APPAREILS[key].TEXTE_IMAGE7;
    tableau_appareils[key]['image8'] = data.APPAREILS[key].IMAGE8;
    tableau_appareils[key]['texte-image8'] = data.APPAREILS[key].TEXTE_IMAGE8;
    tableau_appareils[key]['image9'] = data.APPAREILS[key].IMAGE9;
    tableau_appareils[key]['texte-image9'] = data.APPAREILS[key].TEXTE_IMAGE9;
    tableau_appareils[key]['image10'] = data.APPAREILS[key].IMAGE10;
    tableau_appareils[key]['texte-image10'] = data.APPAREILS[key].TEXTE_IMAGE10;
    tableau_appareils[key]['image11'] = data.APPAREILS[key].IMAGE11;
    tableau_appareils[key]['texte-image11'] = data.APPAREILS[key].TEXTE_IMAGE11;
    tableau_appareils[key]['image12'] = data.APPAREILS[key].IMAGE12;
    tableau_appareils[key]['texte-image12'] = data.APPAREILS[key].TEXTE_IMAGE12;
    tableau_appareils[key]['image13'] = data.APPAREILS[key].IMAGE13;
    tableau_appareils[key]['texte-image13'] = data.APPAREILS[key].TEXTE_IMAGE13;
    tableau_appareils[key]['image14'] = data.APPAREILS[key].IMAGE14;
    tableau_appareils[key]['texte-image14'] = data.APPAREILS[key].TEXTE_IMAGE14;
    tableau_appareils[key]['image15'] = data.APPAREILS[key].IMAGE15;
    tableau_appareils[key]['texte-image15'] = data.APPAREILS[key].TEXTE_IMAGE15;
    tableau_appareils[key]['texte-general'] = data.APPAREILS[key].TEXTE_GENERAL;
   }
                        
 })

这部分程序有效。当我将此代码行放入函数中时:

console.log(tableau_appareils);

tableau_appareils 数组填充了 JSON 文件中的所有数据:

0 : [publication: 'o', url: 'aires_35iiic', marque: 'Aires', titre: 'Aires 35 III-C', sous-titre: 'Un clone de Leica M3 sans objectif interchangeable', …]
1 : [publication: 'n', url: 'aires_radar_eye', marque: 'Aires', titre: 'Aires Eye-Radar', sous-titre...

在另一个函数中,我想在数组每个条目的“url”字段中找到 new_url 并获取该条目编号。我写道:

for (var i = 0; i < nombre_appareils; i++) {
            
    if (tableau_appareils[i]['url'] == new_url) {
            number = i;
            break;
    }
            
}

在控制台中,我收到一条错误消息:

Uncaught TypeError: Cannot read properties of undefined (reading '0')

知道我做错了什么吗?

谢谢!

javascript multidimensional-array
1个回答
0
投票

您的消息表明

tableau_appareils
未在第二个片段中定义。它是第一个片段的本地内容。

如果您逐行调试代码,您应该会看到这一点。

console.log(tableau_appareils) // undefined.
for (var i = 0; i < nombre_appareils; i++) {
            
    if (tableau_appareils[i]['url'] == new_url) {
            number = i;
            break;
    }
            
}

有多种方法可以向您展示

tableau_appareils
第二个片段:

  • 将其设为全局变量
  • 从创建它的函数返回它并将其传递到需要它的地方(比全局变量更好)
© www.soinside.com 2019 - 2024. All rights reserved.