javascript - Length of and iterating array that is using custom properties - Stack Overflow

var profileDataCalls = [];profileDataCalls['Profile'] = GetUserAttributesWithDataByGroup;pro

var profileDataCalls = [];

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

My problem is the above JavaScript array is only a length of 0. I need an array that can be iterated over and holds the key(string) and value?

var profileDataCalls = [];

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

My problem is the above JavaScript array is only a length of 0. I need an array that can be iterated over and holds the key(string) and value?

Share Improve this question edited Jan 31, 2013 at 20:21 Phrogz 304k113 gold badges667 silver badges758 bronze badges asked Jan 31, 2013 at 20:03 MarkMark 2,5876 gold badges35 silver badges45 bronze badges 4
  • Arrays are indexed by number. This is an object with associated attributes, not an array. There is no way to create an associated array like this in javascript. – toby Commented Jan 31, 2013 at 20:06
  • 1 you might want to take a look at the following article: andrewdupont/2006/05/18/… – Russ Cam Commented Jan 31, 2013 at 20:07
  • 1 This has been asked many times before. See stackoverflow./a/6709470/1331430 – Fabrício Matté Commented Jan 31, 2013 at 20:07
  • possible duplicate of Loop through array in JavaScript – Phrogz Commented Jan 31, 2013 at 20:21
Add a ment  | 

4 Answers 4

Reset to default 6

You want:

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

Then you can access the values with, for example, profileDataCalls.profile or profileDataCalls[profile] (to retrieve whatever value is represented by the variable GetUserAttributesWithDataByGroup)

To iterate through the object, use:

for (var property in profileDataCalls) {
    if (profileDataCalls.hasOwnProperty(property)) {
        console.log(property + ': ' + profileDataCalls[property));
    }
}

Javascript doesnt have associative arrays per say , what you are doing is adding properties to the Array instance. IE doint something like

profileDataCalls.Notes = GetUserNotes;

so you cant really use length to know how many properties your array would have.

now if your issue is iterating over your object properties , you dont need an array , just use an object :

profileDataCalls = {}

then use a for in loop to iterate over the keys :

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
 }
}

it you have different requirements then explain it.

now the tricky part is profileDataCalls[0]="something" would be valid for an object({}), you would create a property only available through the lookup (obj[0]) syntax since it is not a valid variable name for javascript.

other "crazy stuffs" :

o={}
o[0xFFF]="foo"
// gives something like Object {4095:"foo"} in the console

Actually it also works like this:

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

Then you can access the values with, for example, profileDataCalls[0].profile or profileDataCalls[0]["profile"].

To iterate through the object, you can use:

for (key in profileDataCalls[0]) {
   console.log(profileDataCalls[0][key]);
}

Since this is an associative array, I never understood why people are saying its not possible in Javascript...in JS, everything is possible.

Even more, you could expand this array easily like this:

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()
}];

And access the array entries with profileDataCalls[0]["profile"] or profileDataCalls[1]["profile"] respectively.

What you want is an object:

Try

    var profileDataCalls = new Object();

then reference your data as you do already.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745358356a4624245.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信