93

In Python I can use the .values() method to iterate over the values of a dictionary.

For example:

mydict = {'a': [3,5,6,43,3,6,3,],
          'b': [87,65,3,45,7,8],
          'c': [34,57,8,9,9,2],}
values = mydict.values():

Where values contains:

[
    [3,5,6,43,3,6,3,],
    [87,65,3,45,7,8],
    [34,57,8,9,9,2],
]

How can I get only the values of the dictionary in Javascript?

My original print example wasn't clear on what I'd like to do. I only want a list/array of the values within the dictionary.

I realize I can cycle through the list and create a new list of the values, but is there a better way?

2
  • @Oriol I disagree with this closure. This one specifically asks about returning to an array. Granted, not all the answers address that properly. The other question wants to access it from a loop. I think this is shown by the fact that my answer applies to this question but not the target. Commented Feb 9, 2015 at 17:03
  • @Scimonster The most upvoted answer in the other question answers this perfectly. It even includes a variation of your answer to this question. You can vote to reopen if you disagree, though. Commented Feb 9, 2015 at 17:07

8 Answers 8

114

Updated
I've upvoted Adnan's answer as it was the first. I'm just posting a bit more details if it helps.

The for..in loop is what you are looking for -

var dictionary = {
    id:'value',
    idNext: 'value 2'
}

for (var key in dictionary){
    //key will be -> 'id'
    //dictionary[key] -> 'value'
}

To get all the keys in the dictionary object, you can Object.keys(dictionary)
This means, you can do the same thing in an array loop --

var keys = Object.keys(dictionary);
keys.forEach(function(key){
    console.log(key, dictionary[key]);
});

This proves especially handy when you want to filter keys without writing ugly if..else loops.

keys.filter(function(key){
    //return dictionary[key] % 2 === 0;
    //return !key.match(/regex/)
    // and so on
});

Update - To get all the values in the dictionary, currently there is no other way than to perform a loop. How you do the loop is a matter of choice though. Personally, I prefer

var dictionary = {
    a: [1,2,3, 4],
    b:[5,6,7]
}
var values = Object.keys(dictionary).map(function(key){
    return dictionary[key];
});
//will return [[1,2,3,4], [5,6,7]]
Sign up to request clarification or add additional context in comments.

8 Comments

Upvoting isn't about who's first. If the answer is helpful & useful then it's wroth upvoting, pretty much like yours xdazz's
Object.keys(dictionary).map can be made prettier in jQuery! Check out stackoverflow.com/a/18063034/764463
@mac9416 oh boy you really showed that 2013 comment who's boss!
@ogurets folks be salty.
|
42

Object.values() is available in Firefox 47 and Chrome 51, here's a one-line polyfill for other browsers:

Object.values = Object.values || function(o){return Object.keys(o).map(function(k){return o[k]})};

Comments

27

With jQuery, there's a pretty one line version using $.map():

var dict = {1: 2, 3: 4};
var values = $.map(dict, function(value, key) { return value });
var keys = $.map(dict, function(value, key) { return key });

1 Comment

The most elegant solution
13

Not trying to say that any of the other answers are wrong, but if you're not opposed to using an external library, underscore.js has a method for precisely this:

_.values({one: 1, two: 2, three: 3});
// returns [1, 2, 3]

Comments

6

You can use for in

mydict = {'a': [3,5,6,43,3,6,3,],
          'b': [87,65,3,45,7,8],
          'c': [34,57,8,9,9,2]};
for (var key in mydict){
    alert(mydict[key]);
}

Comments

6

In ES6, currently supported by default in Firefox and with flags in Chrome, you can do this:

a = {'a': [3,5,6,43,3,6,3,],
      'b': [87,65,3,45,7,8],
      'c': [34,57,8,9,9,2]}
values = [a[x] for (x in a)];

values will now be the expected array.

This is also useful for code golf. Removing the spaces around for cuts it down to 17 characters.

Comments

3

In javascript, you use for..in to loop the properties of an object.

var mydict = {
    'a': [3,5,6,43,3,6,3,],
    'b': [87,65,3,45,7,8],
    'c': [34,57,8,9,9,2]
 };

for (var key in mydict) {
  console.log(mydict[key]);
}

1 Comment

console.log() I forget about it every time, +1
1

if you want to get only the values the use the follwing code:

 for(keys in mydict){
   var elements = mydict[keys];
   console.log(elements);
 }

you can get Individual elements by index value in elements array.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.