2
var profileDataCalls = [];

profileDataCalls['Profile'] = GetUserAttributesWithDataByGroup;
profileDataCalls['Address'] = GetUserAddresses;
profileDataCalls['Phone'] = GetUserPhoneNumbers;
profileDataCalls['Certs'] = GetUserCertifications;
profileDataCalls['Licenses'] = GetUserLicenses;
profileDataCalls['Notes'] = GetUserNotes;

我的问题是上面的 JavaScript 数组的长度仅为 0。我需要一个可以迭代并保存键(字符串)和值的数组吗?

4

4 回答 4

6

你要:

var profileDataCalls = {
    'Profile' : GetUserAttributesWithDataByGroup,
    'Address' : GetUserAddresses,
    'Phone' : GetUserPhoneNumbers,
    'Certs' : GetUserCertifications,
    'Licenses' :GetUserLicenses,
    'Notes' : GetUserNotes
};

然后,您可以访问这些值,例如,profileDataCalls.profileprofileDataCalls[profile](检索变量表示的任何值GetUserAttributesWithDataByGroup

要遍历对象,请使用:

for (var property in profileDataCalls) {
    if (profileDataCalls.hasOwnProperty(property)) {
        console.log(property + ': ' + profileDataCalls[property));
    }
}
于 2013-01-31T20:06:06.330 回答
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"]

于 2013-01-31T20:42:47.183 回答
2

每个 Javascript 没有关联数组,您正在做的是向 Array 实例添加属性。IE 做类似的事情

profileDataCalls.Notes = GetUserNotes;

所以你不能真正使用长度来知道你的数组有多少属性。

现在,如果您的问题是遍历对象属性,则不需要数组,只需使用对象:

profileDataCalls = {}

然后使用 for in 循环遍历键:

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
于 2013-01-31T20:07:56.043 回答
1

你想要的是一个对象:

尝试

    var profileDataCalls = new Object();

然后像以前一样引用您的数据。

于 2013-01-31T20:04:45.673 回答