Javascript相当于Python的values()字典方法

mon*_*kut 57 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():
Run Code Online (Sandbox Code Playgroud)

其中values包括:

[
    [3,5,6,43,3,6,3,],
    [87,65,3,45,7,8],
    [34,57,8,9,9,2],
]
Run Code Online (Sandbox Code Playgroud)

如何在Javascript中只获取字典的值?

编辑

我原来的印刷例子并不清楚我想做什么.我只想要字典中值的列表/数组.

我意识到我可以遍历列表并创建一个新的值列表,但有更好的方法吗?

Jib*_*ham 77

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

的for..in循环是你在找什么-

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

for (var key in dictionary){
    //key will be -> 'id'
    //dictionary[key] -> 'value'
}
Run Code Online (Sandbox Code Playgroud)

要获取dictionary对象中的所有键,您可以Object.keys(dictionary)
这意味着,您可以在数组循环中执行相同的操作 -

var keys = Object.keys(dictionary);
keys.forEach(function(key){
    console.log(key, dictionary[key]);
});
Run Code Online (Sandbox Code Playgroud)

当您想要在不编写丑陋if..else循环的情况下过滤键时,这尤其方便.

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

更新 - 要获取字典中的所有值,目前没有其他方法可以执行循环.你如何做循环是一个选择问题.就个人而言,我更喜欢

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]]
Run Code Online (Sandbox Code Playgroud)

  • @Temuz,http://needsmorejquery.com/ (4认同)
  • Upvoting不是关于谁是第一个.如果答案是有用的和有用的,那么它就会发出誓言,就像你的xdazz一样 (3认同)

Tem*_*muz 23

使用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 });
Run Code Online (Sandbox Code Playgroud)


use*_*ser 17

在Firefox 47和Chrome 51中提供了Object.values(),这里是针对其他浏览器的单行polyfill:

Object.values = Object.values || function(o){return Object.keys(o).map(function(k){return o[k]})};
Run Code Online (Sandbox Code Playgroud)


Cat*_*oes 10

不要试图说任何其他答案是错误的,但如果你不反对使用外部库,则underscore.js有一个方法可以准确地说:

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


Adi*_*Adi 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]);
}
Run Code Online (Sandbox Code Playgroud)


Sci*_*ter 5

在 ES6 中,目前在 Firefox 中默认支持,在 Chrome 中使用标志,你可以这样做:

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)];
Run Code Online (Sandbox Code Playgroud)

values 现在将是预期的数组。

这对于代码高尔夫也很有用。删除周围的空格for将其减少到 17 个字符。