相当于 Python 的 value() dictionary 方法的 Javascript

在 Python 中,我可以使用 .values()方法迭代字典的 价值观

例如:

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():

其中 values包含:

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

我怎样才能只得到 Javascript 中字典的值?

我最初的打印例子并不清楚我想做什么。我只需要字典中值的列表/数组。

我意识到我可以循环遍历这个列表并创建一个新的值列表,但是有没有更好的方法呢?

135123 次浏览

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

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

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

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

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.

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

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]

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.