var profileDataCalls = [];
profileDataCalls['Profile'] = GetUserAttributesWithDataByGroup;
profileDataCalls['Address'] = GetUserAddresses;
profileDataCalls['Phone'] = GetUserPhoneNumbers;
profileDataCalls['Certs'] = GetUserCertifications;
profileDataCalls['Licenses'] = GetUserLicenses;
profileDataCalls['Notes'] = GetUserNotes;
我的问题是上面的JavaScript数组只有0的长度。我需要一个可以迭代的数组并保存键(字符串)和值吗?
答案 0 :(得分:6)
你想:
var profileDataCalls = {
'Profile' : GetUserAttributesWithDataByGroup,
'Address' : GetUserAddresses,
'Phone' : GetUserPhoneNumbers,
'Certs' : GetUserCertifications,
'Licenses' :GetUserLicenses,
'Notes' : GetUserNotes
};
然后,您可以使用profileDataCalls.profile
或profileDataCalls[profile]
来访问这些值(以检索由变量GetUserAttributesWithDataByGroup
表示的任何值)
要遍历对象,请使用:
for (var property in profileDataCalls) {
if (profileDataCalls.hasOwnProperty(property)) {
console.log(property + ': ' + profileDataCalls[property));
}
}
答案 1 :(得分:2)
Javascript根本没有关联数组,你正在做的是向Array实例添加属性。 IE就像
profileDataCalls.Notes = GetUserNotes;
所以你不能真正使用长度知道你的数组有多少属性。
现在如果你的问题是迭代你的对象属性,你不需要一个数组,只需使用一个对象:
profileDataCalls = {}
然后使用for循环迭代键:
for(var i in profileDataCalls ){
// i is a key as a string
if(profileDataCalls.hasOwnProperty(i)){
//do something with profileDataCalls[i] value , or i the key
}
}
你有不同的要求然后解释它。
现在棘手的部分profileDataCalls[0]="something"
对于对象({})有效,你会创建一个只能通过查找(obj[0]
)语法获得的属性,因为它不是一个有效的变量名对于javascript。
其他“疯狂的东西”:
o={}
o[0xFFF]="foo"
// gives something like Object {4095:"foo"} in the console
答案 2 :(得分:2)
实际上它也是这样的:
var profileDataCalls = [{
Profile: GetUserAttributesWithDataByGroup(),
Address: GetUserAddresses(),
Phone: GetUserPhoneNumbers(),
Certs: GetUserCertifications(),
Licenses: GetUserLicenses(),
Notes: GetUserNotes()
}];
然后,您可以使用profileDataCalls[0].profile
或profileDataCalls[0]["profile"]
来访问这些值。
要遍历对象,您可以使用:
for (key in profileDataCalls[0]) {
console.log(profileDataCalls[0][key]);
}
由于这是一个关联数组,我从来不明白为什么人们在Javascript中说它不可能......在JS中,一切皆有可能。
更重要的是,您可以像这样轻松扩展此阵列:
var profileDataCalls = [{
Profile: GetUserAttributesWithDataByGroup(),
Address: GetUserAddresses(),
Phone: GetUserPhoneNumbers(),
Certs: GetUserCertifications(),
Licenses:GetUserLicenses(),
Notes: GetUserNotes()
}{
Profile: GetUserAttributesWithDataByGroup(),
Address: GetUserAddresses(),
Phone: GetUserPhoneNumbers(),
Certs: GetUserCertifications(),
Licenses: GetUserLicenses(),
Notes: GetUserNotes()
}];
分别使用profileDataCalls[0]["profile"]
或profileDataCalls[1]["profile"]
访问数组条目。
答案 3 :(得分:1)
你想要的是一个对象:
尝试
var profileDataCalls = new Object();
然后像你一样引用你的数据。