动态更新'嵌套'javascript对象

时间:2018-01-25 00:12:38

标签: javascript node.js

我正在尝试创建一个动态更新的对象。

以下是我想要创建的对象类型的设置(注意:我可以在键中添加其他内容,例如addresscountry等):

var contacts = {"Bruce Wayne":{"phone number":'123-456-7890', "email":"bwayne@night.com"}, "Alfred":{"phone number" :'987-654-3210', "email": "alfred@yourang.com"}, "Clark Kent":{"phone number":'951-753-8520', "email":"nothing@krypton.com"}}

因此,对于每个名称(Bruce WayneAlfred,...),我都会为其分配一些密钥。

我正在使用npm faker生成一些虚假数据来尝试填充如上所示的数组,并使用大纲

我能够获得循环,但它总是返回最后一次迭代的数据。我明白这是因为我正在做contact = ...。由于这是一个对象,我不能使用push,AFAIK。

function getContact(numContacts){
    contacts = {}
    for (var i = 0; i < numContacts; i++){
        console.log(i);
        var name = faker.name.firstName() + " " + faker.name.lastName();
        var phoneNum = faker.phone.phoneNumber();
        var email = faker.internet.email();
        contacts = {name :{ "phone number": phoneNum, "email": email}}
        // contacts.name = {"phone number": phoneNum, "email":email};  // this also returns just the last instance.
    };
    return contacts;
};

var contacts = getContact(10); // This should create ten people, each with a phone number and email.

循环几乎成功创建了一个单个名称。这将返回:

  

name,761.704.3328 x4287,Leopold81 @ hotmail.com

但是在那次迭代中,name变量实际上是Joe Schmoe,而不是字面name ......

我忽略了什么,以确保contacts对象填充了10个人,解析后的name,而不仅仅是迭代中的最后一个?

2 个答案:

答案 0 :(得分:2)

观察

  • 您尝试使用name变量作为密钥,但是,您正在做的是添加一个名为name的密钥。

  • 您需要做的是按以下方式以编程方式创建密钥:contacts[name]并使用phoneNumberEmail分配对象。

  • 此代码是模拟您的方案的示例。

&#13;
&#13;
var faker = {
  name: {
    firstName: function() {
      return "Clark";
    },
    lastName: function() {
      return "Kent";
    }
  },
  phone: {
    phoneNumber: function() {
      return '951-753-8520';
    }
  },
  internet: {
    "email": function() {
      return "nothing@krypton.com";
    }
  }
};

function getContact(numContacts) {
  var contacts = {}
  for (var i = 0; i < numContacts; i++) {
    var name = faker.name.firstName() + " " + faker.name.lastName();
    var phoneNum = faker.phone.phoneNumber();
    var email = faker.internet.email();

    contacts[name + '_' + i] = {
      "phone number": phoneNum,
      "email": email
    }
  }

  return contacts;
}

var contacts = getContact(10);

console.log(contacts);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

名称是对象中的键。您可以像使用数组索引一样使用它来填充联系人。这应该有效:

contacts[name] = {"phone number": phoneNum, "email": email}