使用自定义属性的迭代和迭代数组的长度

时间:2013-01-31 20:03:10

标签: javascript arrays

var profileDataCalls = [];

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

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

4 个答案:

答案 0 :(得分: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));
    }
}

答案 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].profileprofileDataCalls[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();

然后像你一样引用你的数据。