Подтвердить что ты не робот

Javascript эквивалент метода словарных значений Python()

В 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?

ИЗМЕНИТЬ

В моем первоначальном примере печати не было видно, что я хотел бы сделать. Мне нужен только список/массив значений в словаре.

Я понимаю, что могу перебирать список и создавать новый список значений, но есть ли лучший способ?

4b9b3361

Ответ 1

Обновление
Я одобрил ответ Аднан, поскольку он был первым. Я просто размещаю несколько подробностей, если это помогает.

Контур 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]]

Ответ 2

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

Ответ 3

Не пытайтесь сказать, что любой из других ответов неверен, но если вы не против использования внешней библиотеки, underscore.js имеет метод для именно это:

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

Ответ 4

Object.values ​​() доступен в Firefox 47 и Chrome 51, здесь однострочный polyfill для других браузеров:

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

Ответ 5

Вы можете использовать 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]);
}

Ответ 6

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

Ответ 7

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

values теперь будет ожидаемым массивом.

Это также полезно для кода для гольфа. Удаление пробелов вокруг for сокращает его до 17 символов.

Ответ 8

если вы хотите получить только значения, использующие следующий код:

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

вы можете получить отдельные элементы по значению индекса в массиве элементов.