我正在尝试创建一个动态更新的对象。
以下是我想要创建的对象类型的设置(注意:我可以在键中添加其他内容,例如address
,country
等):
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 Wayne
,Alfred
,...),我都会为其分配一些密钥。
我正在使用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
,而不仅仅是迭代中的最后一个?
答案 0 :(得分:2)
您尝试使用name
变量作为密钥,但是,您正在做的是添加一个名为name
的密钥。
您需要做的是按以下方式以编程方式创建密钥:contacts[name]
并使用phoneNumber
和Email
分配对象。
此代码是模拟您的方案的示例。
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;
答案 1 :(得分:1)
名称是对象中的键。您可以像使用数组索引一样使用它来填充联系人。这应该有效:
contacts[name] = {"phone number": phoneNum, "email": email}