Javascript equivalent of Python's values() dictionary method

Javascript

Javascript Problem Overview


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?

Javascript Solutions


Solution 1 - Javascript

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]]

Solution 2 - Javascript

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]})};

Solution 3 - Javascript

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 });

Solution 4 - Javascript

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]

Solution 5 - Javascript

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]);
}

Solution 6 - Javascript

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.

Solution 7 - Javascript

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]);
}

Solution 8 - Javascript

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmonkutView Question on Stackoverflow
Solution 1 - JavascriptJibi AbrahamView Answer on Stackoverflow
Solution 2 - JavascriptuserView Answer on Stackoverflow
Solution 3 - JavascriptTemuzView Answer on Stackoverflow
Solution 4 - JavascriptCatShoesView Answer on Stackoverflow
Solution 5 - JavascriptAdiView Answer on Stackoverflow
Solution 6 - JavascriptScimonsterView Answer on Stackoverflow
Solution 7 - JavascriptxdazzView Answer on Stackoverflow
Solution 8 - JavascriptBeingNerdView Answer on Stackoverflow