如何向JavaScript多维数组插入值并动态创建指定结构的数组
创建符合需求的JavaScript多维数组
嘿,我来帮你搞定这个多维数组的创建需求!根据你给出的布局,这里有几种实用的实现方式,你可以根据自己的场景来选:
方式一:先初始化再逐个赋值(直观易懂)
这种方式适合你明确知道要赋值的位置,先把数组框架搭好,再填充内容:
// 先定义totalInputs,这里你用到了0-4的页面问题序号,所以设为5就行 const totalInputs = 5; // 初始化二维结构:第一个维度是totalInputs长度的数组,每个元素是一个空对象(因为第二个维度的键有字符串,用对象比数组更灵活) const array_answers = Array.from({ length: totalInputs }, () => ({})); // 给指定位置赋值 array_answers[0][1] = "yes"; array_answers[1][2] = "no"; array_answers[2]["2-subquestion"] = "text input"; // 注意这里的键是字符串,因为包含连字符,必须用引号包裹 array_answers[3][8] = "yes"; array_answers[4]["8-subquestion"] = "text input";
为什么用对象而不是数组?因为你的第二个维度里有2-subquestion这种非数字的键,数组的索引只能是正整数,没法直接用这种字符串当索引,用对象就能完美解决这个问题,键可以是任意字符串,完全匹配你的需求。
方式二:直接字面量定义(简洁高效)
如果所有需要赋值的位置都确定,直接用字面量写出来更省事:
const array_answers = [ { 1: "yes" }, { 2: "no" }, { "2-subquestion": "text input" }, { 8: "yes" }, { "8-subquestion": "text input" } ];
要是totalInputs比这个数组的长度大,比如你需要预留更多页面问题的位置,那可以用扩展运算符补充空对象:
const totalInputs = 10; const array_answers = [ { 1: "yes" }, { 2: "no" }, { "2-subquestion": "text input" }, { 8: "yes" }, { "8-subquestion": "text input" }, // 补充剩下的空对象,凑够totalInputs的长度 ...Array.from({ length: totalInputs - 5 }, () => ({})) ];
如果你一定要用数组当第二个维度?
要是你有特殊需求,必须让第二个维度也是数组,那得先给-subquestion的键对应一个数字索引,比如定义一个映射关系:
// 先把字符串键映射成数字索引,比如假设2-subquestion对应索引3,8-subquestion对应索引9 const subquestionIndexMap = { "2-subquestion": 3, "8-subquestion": 9 }; const totalInputs = 5; // 初始化第二个维度为数组 const array_answers = Array.from({ length: totalInputs }, () => []); array_answers[0][1] = "yes"; array_answers[1][2] = "no"; array_answers[2][subquestionIndexMap["2-subquestion"]] = "text input"; array_answers[3][8] = "yes"; array_answers[4][subquestionIndexMap["8-subquestion"]] = "text input";
不过这种方式需要你明确每个-subquestion对应的数字索引,灵活性不如用对象的方式,所以更推荐前两种方案~
内容的提问来源于stack exchange,提问作者Josh Robinson
相关产品推荐
相关产品推荐

