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 都会自动重新调整尺寸。
感谢您的帮助!
我试图在 JavaScript 中填充三维数组,但我在 Web 浏览器控制台中收到一条错误消息。
程序步骤如下:
• 打开一个 JSON 数组,基于此结构:
// 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 都会自动重新调整尺寸。
感谢您的帮助!