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

JavaScript, преобразовать объект в массив

У меня есть объект:

var obj = {
    "Mike": 24,
    "Peter": 23,
    "Simon": 33,
    "Tom": 12,
    "Frank": 31
};

Я хочу создать массив, содержащий значения объекта. Ключи (имена клавиш) можно игнорировать:

[24, 23, 33, 12, 31]

Порядок значений НЕ ВАЖНО!

Одно решение (очевидно) должно иметь функцию, которая принимает значения и помещает их в массив:

var arr = valuesToArray(obj); 

Я буду принимать такую ​​функцию, как ответ. Тем не менее, я был бы более доволен, если бы была функция API (ECMAScript, jQuery, специфичная для браузера,...), которая могла бы это сделать. Что-то подобное существует?

4b9b3361

Ответ 1

Очевидным способом было бы сделать цикл for-in, поскольку @quixoto предлагает, но только для записи, и так как вы ищете встроенный цикл, в пути вы могли бы соединить новые методы ECMAScript 5 Object.keys и Array.prototype.map, доступный на последние браузеры:

function valuesToArray(obj) {
  return Object.keys(obj).map(function (key) { return obj[key]; });
}

Ответ 2

С помощью jQuery вы можете использовать каждую функцию:

var obj = {
    "Mike": 24,
    "Peter": 23,
    "Simon": 33,
    "Tom": 12,
    "Frank": 31
}

myArray=new Array();
$.each(obj, function(key, value) { 
  myArray.push(value);
});

Ответ 3

Нет никакого встроенного способа сделать это где угодно. Следующее делает то, что вы предлагаете, и может быть "сокращено" на более умные версии функционального программирования в зависимости от вашей библиотеки, но все они будут иметь одинаковую эффективность.

function valuesToArray(obj) {
    var result = [];
    for (var key in obj) {
       if (obj.hasOwnProperty(key)) {
           result.push(obj[key]);
       }
    }
    return result;
}

Ответ 4

Проводя это строго для удовольствия. Сохраните ваши downvotes. Я не рекомендую его использовать. ; о)

Пример: http://jsfiddle.net/WGpXX/

var arr = eval( '[' +
    JSON.stringify(obj)
    .slice(1,-1)
    .replace(/"[^"]+":/g,'')
    + ']');

Технически работает в этом простом случае.

Ответ 5

С помощью программы Underscore lib try:

function valuesToArray(o) {
    return _.pairs(o);
}

var obj = {
    "Mike": 24,
    "Peter": 23
    //...
    },
    result = valuesToArray(obj);

Тогда результат будет [[ "Майк", 24], [ "Петр", 23]];

Подробнее о методе пар здесь: http://underscorejs.org/#pairs

Ответ 6

Попробуйте следующее:

var obj = {     "Mike": 24,     "Peter": 23,     "Simon": 33,     "Tom": 12,     "Frank": 31 } ;
    var arr = []
    for(var a in obj)
    {
        var val = obj[a];
        arr.push(val);
    }
alert(arr.length)

Ответ 7

В некоторых библиотеках есть что-то делать (например, функция прототипов "значения" ), но они действительно просто обертки вокруг функции, которая перебирает и возвращает значения объекта.

http://www.prototypejs.org/api/object/values

Ответ 8

Используя bob.js, это можно сделать довольно просто:

function valuesToArray(obj) {
    return bob.collections.extensions.toArray.call(obj);
}