JavaScript,将对象转换为数组

时间:2011-01-05 18:48:26

标签: javascript jquery

我有一个对象:

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

我想创建一个包含对象值的数组。密钥(密钥名称)可以忽略不计:

[24, 23, 33, 12, 31]

值的顺序并不重要!

一个解决方案(显然)会有一个函数来获取值并将它们放入一个数组中:

var arr = valuesToArray(obj); 

我会接受这样的功能作为答案。但是,如果有一个能够做到这一点的API函数(ECMAScript,jQuery,特定于浏览器......),我会更高兴。有这样的事吗?

9 个答案:

答案 0 :(得分:31)

显而易见的方法是执行for-in循环,如@quixoto所示,但只是为了记录,并且因为您正在寻找内置方式,可以配对Object.keys上提供的新ECMAScript 5方法Array.prototype.maplatest browsers

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

答案 1 :(得分:9)

使用 Object.values 它将返回数组。

Object.values(obj) // [24, 23, 33, 12, 31]

答案 2 :(得分:6)

使用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 :(得分:5)

在任何地方都没有内置的方法可以做到这一点。以下是您的建议,可以根据您的库“缩短”为更聪明的功能编程版本,但它们都具有相同的效率。

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

答案 4 :(得分:2)

严格发布此内容以获取乐趣。保存你的downvotes。我不建议实际使用它。的 O)

示例: http://jsfiddle.net/WGpXX/

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

技术上适用于这种简单的情况。

答案 5 :(得分:1)

使用Underscore lib尝试:

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

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

然后结果是[[“Mike”,24],[“Peter”,23]];

有关配对方法的更多详细信息:http://underscorejs.org/#pairs

答案 6 :(得分:0)

试试这个:

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 :(得分:0)

有些库有一些事情要做(例如原型的“值”函数),但它们实际上只是围绕循环的函数的包装并返回对象的值。

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

答案 8 :(得分:0)

使用bob.js这可以非常简单地完成:

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