最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Javascript Array Key Lookup - Stack Overflow

programmeradmin8浏览0评论

I'm sorry if this has been asked before, it's something that's difficult to search for...

I want to use a javascript Array to hold objects, with the key as the ID

for example, let's say I had a bunch of people who had different IDs

 var people = new Array();
 var person = {property: value}; // this is person ID 4

 var people[4] = person;

I want to be able to then reference that user by saying, people[ID].propery

The problem is that the output of this array now would be;

 null,null,null,null,object

Because it's expecting the keys to be 0,1,2,3,4

Am I being stupid or something? :-) We can do it for strings right, so why not non-sequential numbers?

What I'm trying to avoid is having to loop over every single object in the array every time I want to access a particular person inside it, therefore I figured that using the ID number as the key would work

Thanks guys! :-)

I'm sorry if this has been asked before, it's something that's difficult to search for...

I want to use a javascript Array to hold objects, with the key as the ID

for example, let's say I had a bunch of people who had different IDs

 var people = new Array();
 var person = {property: value}; // this is person ID 4

 var people[4] = person;

I want to be able to then reference that user by saying, people[ID].propery

The problem is that the output of this array now would be;

 null,null,null,null,object

Because it's expecting the keys to be 0,1,2,3,4

Am I being stupid or something? :-) We can do it for strings right, so why not non-sequential numbers?

What I'm trying to avoid is having to loop over every single object in the array every time I want to access a particular person inside it, therefore I figured that using the ID number as the key would work

Thanks guys! :-)

Share Improve this question asked Sep 7, 2013 at 21:07 Andy PhillipsAndy Phillips 2471 gold badge4 silver badges14 bronze badges 2
  • 1 What's output of array mean? Yes, arrays in JS are sparse, and you might better consider using objects in this case, but I admit I still don't understand what's wrong in the example you've shown. – raina77ow Commented Sep 7, 2013 at 21:13
  • 1 "the output of this array now would be null,null,null,null,object" - Arrays don't really have an "output". Your array would have one element at index 4, and if you tried to access the lower indexes, e.g., people[2] you'd get undefined, not null. Also you have a syntax error in var people[4] = person;, you need to remove var. – nnnnnn Commented Sep 7, 2013 at 22:53
Add a ment  | 

3 Answers 3

Reset to default 9

Use a dictionary object

var people = {};
people[4] = 'me';

I'd suggest you use collections. A collection is an array of objects. You can then pass properties on each person. You can filter your collection by any property. So close to what you're doing, but instead of relaying on the index, pass the id for each person.

var people = [];  // a collection

var person = {
  id: 4,
  name: 'John'
};

people.push(person);

// Filtering:

// By id
var john = people.filter(function(person) {
  return person.id == 4;
});

// By name
var john = people.filter(function(person) {
  return person.name == 'John';
});

You can abstract those loops above to re-use them. Also make sure your id's are unique. If data is ing from the DB it should be OK, otherwise I'd keep track of them somewhere.

The advantage of collections, as opposed to a plain object with keys is that you can sort and filter, while an object, where the order of properties is not guaranteed, you can't do it as simple.

Note that filter only works on "modern browsers", so IE9+, but there are polyfills for older browsers.

when we use a string as key, like this:

var people = {}; //this is an object
people[name] = 'toto';

we are adding new property to this object, because each object in javascript can be seen as a hashtable.

If you use an array, it's still an object, you can add properties to it using string as key. But if you do something like people[4] = 'toto';, you are adding a string to the array, the length of the array will then bee 5. Of course the number 4 will still be a property of this array object.

发布评论

评论列表(0)

  1. 暂无评论