如何替代数组push方式构建可点访问的非数组JS对象?
解决方案:构建可通过点符号访问的普通对象
我明白你的需求啦——你现在用数组的push方法构建的结果是数组,虽然数组也是JavaScript对象,但没法用点符号直接访问单个条目对吧?其实只需要把初始的数组改成普通的JavaScript对象,然后在循环里给这个对象添加属性就行,这样就能用点符号操作啦!
问题根源
你最初把person定义成了数组:
let person = [{ age: 0, name: "", second_name: "", objeto2: { name2: "", second_name2: "" } }]
所以后续用push方法只会往数组里添加元素,最终得到的自然是一个包含多个对象的数组,只能通过索引(比如person[0])访问,没法用点符号直接定位到单个条目。
修改后的代码示例
方式1:使用合法标识符作为属性名(支持点符号直接访问)
把person初始化为空对象,然后在循环中生成类似user1、user2这样的合法属性名:
// 初始化为普通空对象,而非数组 let person = {}; // 初始化第一个条目(对应你原来的初始数组元素) person.user0 = { age: 0, name: "", second_name: "", objeto2: { name2: "", second_name2: "" } }; // 循环填充后续条目 for (let i = 1; i <= 3; i++) { person[`user${i}`] = { age: i, name: i + 1, second_name: "segundo", objeto2: { name2: "xx..." } }; }
现在你就可以用点符号直接访问每个对象了:
console.log(person.user0.name); // 输出空字符串 console.log(person.user2.age); // 输出2 console.log(person.user3.objeto2.name2); // 输出"xx..."
方式2:使用数字作为键(需通过括号访问,无法直接用点符号)
如果坚持想用数字作为键,也可以这么写,但注意数字开头的属性名不能直接用点符号访问,必须用括号语法:
let person = {}; // 初始化第一个条目 person[0] = { age: 0, name: "", second_name: "", objeto2: { name2: "", second_name2: "" } }; for (let i = 1; i <= 3; i++) { person[i] = { age: i, name: i + 1, second_name: "segundo", objeto2: { name2: "xx..." } }; } // 访问时需用括号 console.log(person[0].age); // 输出0 console.log(person[2].second_name); // 输出"segundo"
关键说明
- 普通JavaScript对象的属性名如果是合法标识符(不以数字开头、不含特殊字符等),就可以用点符号访问;如果是数字或特殊字符,只能用括号语法访问。
- 数组本质是特殊的对象,它的键是数字索引,所以只能通过索引(或括号)访问,无法用点符号定位到单个元素。
内容的提问来源于stack exchange,提问作者kamome
相关产品推荐
相关产品推荐

