我试图通过数组的推送方法构建一个javascript对象。内部有一些循环来填充值,但结果是一个矩阵。我知道它也是一个对象,但我喜欢使用点符号来使用生成的对象。 如何做到这一点并实现一个对象,而不是一个数组
let person = [{
age: 0,
name: "",
second_name: "",
objeto2: {
name2: "",
second_name2: ""
}
}]
for (let i = 1; i <= 3; i++) {
person.push({ age: i, name: i + 1, second_name: "segundo", objeto2: { name2: "xxsxs", second_name2: "adfa" } })
};
结果:
[ { age: 0,
name: '',
second_name: '',
objeto2: { name2: '', second_name2: '' } },
{ age: 1,
name: 2,
second_name: 'segundo',
objeto2: { name2: 'xxsxs', second_name2: 'adfa' } },
{ age: 2,
name: 3,
second_name: 'segundo',
objeto2: { name2: 'xxsxs', second_name2: 'adfa' } },
{ age: 3,
name: 4,
second_name: 'segundo',
objeto2: { name2: 'xxsxs', second_name2: 'adfa' } } ]
答案 0 :(得分:2)
我认为这是你正在寻找的东西:
let person = {
"$0": {age:0, name:"", alias:"", "$1":{name:"", alias:""}}
};
for (let i=0; i<3; i++) {
let j = Object.keys(person).length;
person["$"+j] = {age:j, name:j+1, alias:"segundo", "$1":{name:"xxsxs", alias:"adfa"}};
}
console.log(person);
console.log(person.$2.$1.name);
console.log(person.$3.alias);
console.log(person.$3.$1.alias);
&#13;
$1
,$2
等)
而且这些键总是必须是一个字符串,数字将自动被类型化为字符串:see this link(在&#34;属性名称&#34;下)。person.2.1.name
。因此,我使用$
添加了数字,因此它变为person.$2.$1.name
,这是可能的
您可以将$
更改为任何其他有效字符,例如_
,但我发现这是最具可读性的。 为了能够推动&#39;在现有对象结尾的下一个属性中,我使用Object.keys(person).length
来获取下一个可用的索引号
请注意,在您的情况下,您也可以使用for循环中的整数i
,但Object.keys().length
最接近Array.push()
方法。
此外,如果稍后您需要添加另外两个属性,则不必更改for循环以更正索引号。现在,3
中的i<3;
代表您要添加到对象的属性数量,因此如果您以后想要添加另外5个属性,那么您的for循环将从{{1}开始其他一切都会保持不变。你甚至可以为它做一个功能,使它更灵活:
for (let i=0; i<5; i++) {