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, специфичная для браузера,...), которая могла бы это сделать. Что-то подобное существует?
Ответы
Ответ 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);
}