Accessing properties of an array of objects

15,558

Solution 1

ES6 version:

const numbers = objects.map( o => o.number );

Enjoy.

Solution 2

Use array.map:

var numbers = objects.map(function(o) { return o.number; });

Solution 3

In JavaScript, you can't, because there is no such array. If you've got an array of objects, well, each object is its own precious little snowflake. You can of course transfer the "number" values to a new array, but it'd definitely be a new array.

Some toolkits (Prototype and maybe Functional and Underscore) have a "pluck()" facility that's designed to do exactly what you want, but they too are forced to create new arrays.

function pluck(array, property) {
  var i, rv = [];

  for (i = 0; i < array.length; ++i) {
    rv[i] = array[i][property];
  }

  return rv;
}

Then:

var arrayOfNumbers = pluck(originalArray, "number");

Solution 4

for (i=0; i<myArrayOfObjects.length; i++) {
    doWhatever(myArrayOfObjects[i].number);
}
Share:
15,558

Related videos on Youtube

Dave
Author by

Dave

Updated on June 04, 2022

Comments

  • Dave
    Dave almost 2 years

    pretty basic question I think, but I couldn't find info on that.

    Through d3 I parse a csv and each object look like this

    name: "whatever"
    number: "52"
    

    How can I access the array of all the properties "number" as an array without creating a new array and pushing each element?

    • Jonathan M
      Jonathan M over 12 years
      Do you mean each object looks like: {"name":"whatever","number":52} and you have an array of these objects?
    • Boopathi Rajaa
      Boopathi Rajaa
      you would directly have access to the number field. just use something[i]["number"] or something[i].number ... even looping through is possible . Is there any other specific reason for you to have it as a separate array rather than accessing it directly through a way mentioned earlier...??
  • RightSaidFred
    RightSaidFred over 12 years
    Perhaps worth enhancing pluck to accept a callback that is invoked in the loop and receives the value of the given property of each object. The array could still be used to return an array of values returned from the callback.
  • Pointy
    Pointy over 12 years
    Funny, @RightSaidFred, I was just thinking that :-) Then I realized that that function would really be what you'd normally call "map()", and you could certainly implement "pluck()" in terms of "map()".
  • RightSaidFred
    RightSaidFred over 12 years
    Very true. It's just a less flexible map! Duh!!