如何使用push方法或类似方法在javascript中构造对象而不是数组对象

时间:2018-04-12 19:04:19

标签: javascript arrays object

我试图通过数组的推送方法构建一个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' } } ]

1 个答案:

答案 0 :(得分:2)

我认为这是你正在寻找的东西:

&#13;
&#13;
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;
&#13;
&#13; codepen:https://codepen.io/anon/pen/qoGoKp?editors=0012

  • 在对象中,属性始终需要一个键($1$2等) 而且这些键总是必须是一个字符串,数字将自动被类型化为字符串:see this link(在&#34;属性名称&#34;下)。
  • 由于上述原因,并且特定于点符号本身,you cannot use only a number在使用点符号时访问对象的属性。无法使用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++) {