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中的多维数组问题的主要内容,如果未能解决你的问题,请参考以下文章