JavaScript中的多维数组问题

Posted

技术标签:

【中文标题】JavaScript中的多维数组问题【英文标题】:Multidimensional array problem in JavaScript 【发布时间】:2022-01-20 05:35:47 【问题描述】:

我正在尝试在 javascript 中填充一个三维数组,但在网络浏览器控制台中收到一条错误消息。

这是程序步骤:

• 基于以下结构打开一个 JSON 数组: • 以 3D 创建 tableau_ouverture 数组: ○ 第一个维度是镜头编号; ○ 第二个维度是光圈值; ○ 三维存储三个图像的路径,与这个光圈和这个镜头有关。 • 读取 JSON 数组并应该用数据填充 tableau_ouverture 数组。

// Lit le fichier .json pour trouver le nombre d'objectifs dans la liste.

$.getJSON("includes/comparaison-objectifs.json", function (data) 
  // Redimensionne les tableaux créés plus haut pour en faire des tableaux à deux dimensions : l'indice "i" correspond au numéro de l'objectif, la seconde dimension contient la valeur d'ouverture, les images "center", "middle" et "corner" de cette ouverture.

  var tableau_ouverture = [];
  tableau_ouverture[0] = [];
  tableau_ouverture[0][0] = [];
  tableau_ouverture[0][0][0] = [];

  // Lit le fichier .json pour établir la liste des objectifs.
  for (l in data.OBJECTIFS) 
    if (data.OBJECTIFS[l].PUBLICATION == "o") 
      //Si l'objectif est publié,...

      compteur_ouvertures = 0; //Réinitialise à 0 le compteur des ouvertures pour ce nouvel objectif.

      if (data.OBJECTIFS[l].f1 != "") 
        tableau_ouverture[l][compteur_ouvertures] = data.OBJECTIFS[l].f1; //Stocke la valeur de l'ouverture.

        //Stocke les chemins vers les images "center", "middle" et "corner" pour cette ouverture.
        tableau_ouverture[l][compteur_ouvertures][0] =
          "comparaison-objectifs/" +
          tableau_objectifs_reference[l] +
          "/center-" +
          data.OBJECTIFS[l].f1 +
          ".jpg";
        tableau_ouverture[l][compteur_ouvertures][1] =
          "comparaison-objectifs/" +
          tableau_objectifs_reference[l] +
          "/middle-" +
          data.OBJECTIFS[l].f1 +
          ".jpg";
        tableau_ouverture[l][compteur_ouvertures][2] =
          "comparaison-objectifs/" +
          tableau_objectifs_reference[l] +
          "/corner-" +
          data.OBJECTIFS[l].f1 +
          ".jpg";

        compteur_ouvertures++; //Incrémente le compteur des ouvertures pour passer à une éventuelle autre ouverture au test suivant.
      
    
  
);

我在该行收到一条错误消息:

tableau_ouverture[l][compteur_ouvertures] = data.OBJECTIFS[l].f1;

谁能帮我理解我做错了什么?

谢谢!

【问题讨论】:

也许你应该在错误行之前初始化tableau_ouverture[l] = [] 【参考方案1】:

我认为这可能会有所帮助。变量fnr 应该是 f1, f2, f3, ... 这会在一段时间内完成,直到你用完 'f' 或为空。

compteur_ouvertures = 0; //Réinitialise à 0 le compteur des ouvertures pour ce nouvel objectif.
var fnr = "f" + (compteur_ouvertures + 1);

while (data.OBJECTIFS[l].hasOwnProperty(fnr) && data.OBJECTIFS[l][fnr] != "")

  var fval = data.OBJECTIFS[l][fnr]
  var ref = tableau_objectifs_reference[l];
  tableau_ouverture[l][compteur_ouvertures] = []; // or array();
  //Stocke les chemins vers les images "center", "middle" et "corner" pour cette ouverture.
  tableau_ouverture[l][compteur_ouvertures][0] =
    "comparaison-objectifs/" + ref + "/center-" + fval + ".jpg";
  tableau_ouverture[l][compteur_ouvertures][1] =
    "comparaison-objectifs/" + ref + "/middle-" + fval + ".jpg";
  tableau_ouverture[l][compteur_ouvertures][2] =
    "comparaison-objectifs/" + ref + "/corner-" + fval + ".jpg";

  compteur_ouvertures++;
  fnr = "f" + (compteur_ouvertures + 1);

【讨论】:

您好,感谢您的详细回复!我将您的代码复制/粘贴到我的网页中,但我收到了相同的错误消息:Uncaught TypeError: Cannot set properties of undefined (setting '0') at Object.success (comparaison-objectifs.html:165) at fire (jquery-2.1.3.js:3094) at Object.fireWith [as resolveWith] (jquery-2.1.3.js:3206) at done (jquery-2.1.3.js:8259) at XMLHttpRequest.<anonymous> (jquery-2.1.3.js:8600) 问题出在代码行上:tableau_ouverture[l][compteur_ouvertures] = []; // or array(); 任何提示?【参考方案2】:

我终于使用了另一种方法。我没有重新调整表格的尺寸,而是使用“推送”方法向表格添加条目:

compteur_ouvertures = 0; //Réinitialise à 0 le compteur des ouvertures pour ce nouvel objectif.
var fnr = "f" + (compteur_ouvertures + 1);

while (data.OBJECTIFS[l].hasOwnProperty(fnr) && data.OBJECTIFS[l][fnr] != "")

  var fval = data.OBJECTIFS[l][fnr]
  tableau_objectifs.push([data.OBJECTIFS[l].OBJECTIFREFERENCE + "-" + data.OBJECTIFS[l].MONTUREREFERENCE + "-" + data.OBJECTIFS[l].APPAREILREFERENCE, data.OBJECTIFS[l].OBJECTIFNOM, data.OBJECTIFS[l].MONTURENOM, data.OBJECTIFS[l].APPAREILNOM, ouverture, "comparaison-objectifs/" + data.OBJECTIFS[l].OBJECTIFREFERENCE + "-" + data.OBJECTIFS[l].MONTUREREFERENCE + "-" + data.OBJECTIFS[l].APPAREILREFERENCE + "/center-" + ouverture + ".jpg", "comparaison-objectifs/" + data.OBJECTIFS[l].OBJECTIFREFERENCE + "-" + data.OBJECTIFS[l].MONTUREREFERENCE + "-" + data.OBJECTIFS[l].APPAREILREFERENCE + "/middle-" + ouverture + ".jpg", "comparaison-objectifs/" + data.OBJECTIFS[l].OBJECTIFREFERENCE + "-" + data.OBJECTIFS[l].MONTUREREFERENCE + "-" + data.OBJECTIFS[l].APPAREILREFERENCE + "/corner-" + ouverture + ".jpg"]);

  compteur_ouvertures++;
  fnr = "f" + (compteur_ouvertures + 1);

因此,无论程序需要添加多少列,表格都会自动重新调整尺寸。

感谢您的帮助!

【讨论】:

以上是关于JavaScript中的多维数组问题的主要内容,如果未能解决你的问题,请参考以下文章

对多维数组javascript中的所有整数求和

Javascript中的深平面多维数组[重复]

从javascript中的多维数组中删除一列

多维javascript数组中的for循环

mysql表中的javascript多维数组-不知道那种对象对象是啥

数组多维javascript