80

在 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 中只获取字典的值?

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

我意识到我可以循环浏览列表并创建一个新的值列表,但是有更好的方法吗?

4

8 回答 8

101

更新
我赞成 Adnan 的回答,因为它是第一个。如果有帮助,我只是发布更多细节。

for..in循环是您正在寻找的-

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

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

要获取dictionary对象中的所有键,你可以Object.keys(dictionary)
这意味着,你可以在数组循环中做同样的事情——

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

当您想要过滤键而不编写丑陋的if..else循环时,这证明特别方便。

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

更新- 要获取字典中的所有值,目前除了执行循环之外别无他法。但是,如何进行循环是一个选择问题。就个人而言,我更喜欢

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]]
于 2012-07-31T06:45:52.217 回答
32

Object.values()在 Firefox 47 和 Chrome 51 中可用,这是其他浏览器的单行 polyfill:

Object.values = Object.values || function(o){return Object.keys(o).map(function(k){return o[k]})};
于 2014-05-21T10:37:21.203 回答
27

使用 jQuery,有一个使用 $.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 });
于 2013-08-05T16:23:33.520 回答
12

并不是说其他​​任何答案都是错误的,但是如果您不反对使用外部库,underscore.js有一种方法可以做到这一点:

_.values({one: 1, two: 2, three: 3});
// returns [1, 2, 3]
于 2014-07-23T18:37:08.183 回答
6

您可以使用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]);
}
于 2012-07-31T06:38:20.207 回答
5

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.

于 2015-02-09T16:51:43.017 回答
3

在 javascript 中,您使用for..in循环对象的属性。

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]);
}
于 2012-07-31T06:38:46.680 回答
0

如果您只想获取值,请使用以下代码:

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

您可以通过元素数组中的索引值获取单个元素。

于 2014-01-08T12:25:43.463 回答