Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the values for a specific key from all objects in an array

I'm running an express.js app that has a few apis feeding data to dropdown boxes. The data returned is in the form:

  [     {         key: 'blah',         value: 'Blah Blah'     },     {         key: 'foo',         value: 'Foos'     },     {         key: 'bar',         value: 'Bars'     },     {         key: 'baz',         value: 'Bazingo'     } ]; 

where key is my option key and value is the display text. The structure of this array is fixed and I know for a fact that I'll always have key and value as the fields in each object in the array.

When I try to validate the form submitted (additional server side validation), I'd like to cross-reference the value provided for a field against all the values for "key" in the array (blah, foo, bar, baz). Given that this is going to be a frequently used route, I'd like to avoid iterating over the array to find the permitted values, every single time. Is there a simpler way to do this? In other words, I know I can use:

 permittedValues = [];  for (i = 0; i < array.length; i++){     permittedValues[i] = array[i]["key"];  } 

but I'd like to avoid this for loop, if possible.

P.S: This seems to be a fundamental question and the answers I found online didn't exactly answer my question. So, apologies if this has already been asked and answered.

like image 931
user1452030 Avatar asked Aug 24 '14 08:08

user1452030


People also ask

How do I get the key of an array of objects?

To convert an array's values to object keys: Copied! The function we passed to the forEach() method gets called with each element in the array. On each iteration, we assign the element as a key in the object. The final object contains all of the array's elements as keys.


2 Answers

You could map:

permittedValues = array.map(function(value) {   return value.key; }); 

In ES6/ES2015 it's even prettier with arrow functions:

permittedValues = array.map(value => value.key); 

It might be prettier, but it's probably not faster than a for() loop.

like image 137
Rudie Avatar answered Oct 04 '22 18:10

Rudie


Using lodash,

Since lodash 4.x the _.pluck function has been removed in support to map function.

so you can achieve the desired task by:

import _ from 'lodash' _.map(items, 'key'); 

Ref: What happened to Lodash _.pluck?

like image 37
Vraj Solanki Avatar answered Oct 04 '22 17:10

Vraj Solanki