JavaScript 中的多维数组问题

Multidimensional array problem in JavaScript

我试图在 JavaScript 中填充三维数组,但我在 Web 浏览器控制台中收到一条错误消息。

程序步骤如下:

• 打开一个 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;

任何人都可以帮助我了解我做错了什么吗?

谢谢!

我认为这可能会有所帮助。变量 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);
}

我终于用了另一种方法。我没有重新定义 table,而是使用“推送”方法将条目添加到 table :

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);
}

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

感谢您的帮助!