JavaScript多维关联数组创建疑问:访问值返回undefined,结构是否正确?
问题分析与解决方案
首先得说你的核心问题出在对象键名的定义方式上,还有可能的赋值逻辑问题,咱们一步步拆解:
1. 原结构的错误点
你写的inputs = { indexe: {"input_name":$(input).val()} };这里,对象的键名是字符串"indexe",而不是变量indexe的实际值!
在JavaScript对象字面量里,如果直接写标识符作为键(比如{ key: value }),这个键会被自动转成字符串"key",不管你有没有同名变量。所以哪怕indexe的值是1、2、3,你的inputs对象永远只有一个键叫"indexe",根本不存在0、1这些数字键,这就是你用inputs[0]["input_name"]拿到undefined的原因。
2. 正确的写法
要把变量的值作为对象的键,你需要用方括号包裹变量,也就是ES6的计算属性名语法:
方式一:用对象存储(适合非连续索引或自定义键名)
首先要初始化inputs为空对象,然后每次给它添加新属性,而不是每次都重新赋值整个对象(不然会覆盖之前的内容):
// 先初始化空对象 let inputs = {}; let indexe = 0; // 假设这是你添加输入项的逻辑(比如循环/事件里) indexe += 1; // 递增,比如变成1 inputs[indexe] = { "input_name": $(input).val() }; // 用变量作为键 // 再添加一个 indexe += 1; // 变成2 inputs[indexe] = { "input_name": $(input).val() }; // 现在访问就正常了 console.log(inputs[1]["input_name"]); // 拿到第一个输入的值 console.log(inputs["2"]["input_name"]); // 数字键也可以用字符串访问,效果一样
方式二:用数组存储(适合连续数字索引)
如果你的indexe就是连续的数字(从0或1开始),其实用数组更直观:
// 初始化空数组 let inputs = []; // 直接push新项,不用手动管理indexe inputs.push({ "input_name": $(input).val() }); inputs.push({ "input_name": $(input).val() }); // 访问第一个项(数组索引从0开始) console.log(inputs[0]["input_name"]);
3. 额外注意点
你说“确认不存在作用域问题”,那还要检查是不是每次赋值都覆盖了inputs——比如如果每次添加的时候都重新写inputs = { [indexe]: ... },那之前添加的项都会被删掉,最后inputs里永远只有最后一个项。所以一定要先初始化一次inputs(空对象/数组),然后每次只添加新属性/元素,而不是重新赋值整个变量。
内容的提问来源于stack exchange,提问作者Shahab Ali
相关产品推荐
相关产品推荐

