You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:40:49