How to Extract the Values of a Property from an Array of Objects in JavaScript

JavaScript is a versatile programming language that provides several ways to solve common problems. One such problem is extracting the values of a specific property from an array of objects. In this article, we will explore different approaches to achieve this task, starting with a simple function and then diving into built-in JavaScript methods.

The Problem

Let's consider the following array of objects:


const objArray = [
  { foo: 1, bar: 2 },
  { foo: 3, bar: 4 },
  { foo: 5, bar: 6 }
];

We want to extract the values of a specific field (property) from each object in the array and create a new array containing these values. For example, if we want to extract the values of the "foo" field, the expected output would be [1, 3, 5].

The Trivial Approach

One way to solve this problem is to create a custom utility function that iterates over the array, accesses the specified field for each object, and pushes the value to a new array:


function getFields(input, field) {
    var output = [];
    for (var i = 0; i < input.length; ++i) {
        output.push(input[i][field]);
    }
    return output;
}

var result = getFields(objArray, "foo"); // returns [1, 3, 5]

This approach works perfectly fine and gives the desired output. However, if you're looking for a more elegant or idiomatic solution, JavaScript provides several built-in methods that can simplify the code and make it more readable.

Using the map() Method

The map() method is a powerful tool in JavaScript that allows us to transform each element of an array using a provided function. In this case, we can use the map() method to extract the desired field from each object and create a new array:


const result = objArray.map(obj => obj.foo);

In the code snippet above, we use an arrow function as the transformation function within the map() method. The arrow function takes an object obj as input and returns the value of the "foo" property. The map() method then applies this transformation to each object in the array and returns a new array containing the extracted values.

The resulting array will be [1, 3, 5].

Using the reduce() Method

Another approach to extract the values of a specific field is to use the reduce() method. The reduce() method is often used to compute a single value from an array, but it can also be leveraged to create a new array by accumulating values.


const result = objArray.reduce((accumulator, obj) => {
  accumulator.push(obj.foo);
  return accumulator;
}, []);

In the code snippet above, we provide a callback function to the reduce() method. The callback function takes two parameters: the accumulator and the current object obj. Inside the callback function, we push the value of the "foo" property to the accumulator array. Finally, we return the updated accumulator array.

We also provide an initial value [] to the reduce() method so that it knows to accumulate values into an array.

The resulting array will also be [1, 3, 5].

Using the destructuring assignment

The destructuring assignment syntax can also be used to extract the values of a specific field from each object in the array. This approach provides a concise and readable solution:


const result = objArray.map(({ foo }) => foo);

In the code snippet above, we use the destructuring assignment to extract the "foo" property from each object within the map() method. This allows us to directly access the value of the "foo" property without explicitly referencing obj.foo. This approach can be particularly useful when dealing with multiple properties.

The resulting array will be the same: [1, 3, 5].

Conclusion

In this article, we explored different approaches to extract the values of a specific property from an array of objects in JavaScript. We started with a simple utility function and then demonstrated how to leverage built-in JavaScript methods like map() and reduce() to achieve the same result more elegantly. We also learned how to use the destructuring assignment syntax for concise extraction of specific properties. Choose the approach that best fits your needs and coding style.