JavaScript,将对象转换为数组

我有一个对象:

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

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

 [24, 23, 33, 12, 31] 

值的顺序并不重要!

一个解决方案(显然)将有一个函数,它接受值并将它们放入一个数组:

 var arr = valuesToArray(obj); 

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

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

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

显而易见的方法是执行for-in循环,正如@quixoto建议的那样,但仅仅是为了记录,并且由于您正在寻找内置方式,您可以将新的ECMAScript 5方法与Object.keys和Array配对。 prototype.map ,可在最新浏览器上使用 :

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

使用jQuery,您可以使用每个函数:

 var obj = { "Mike": 24, "Peter": 23, "Simon": 33, "Tom": 12, "Frank": 31 } myArray=new Array(); $.each(obj, function(key, value) { myArray.push(value); }); 

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

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

发布这个严格的乐趣。 保存你的downvotes。 我不建议实际使用它。 ; O)

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

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

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

使用Underscore lib尝试:

 function valuesToArray(o) { return _.pairs(o); } var obj = { "Mike": 24, "Peter": 23 //... }, result = valuesToArray(obj); 

然后结果是[[“迈克”,24],[“彼得”,23]];

关于配对方法的更多细节: http : //underscorejs.org/#pairs

试试这个:

 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) 

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

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

使用bob.js可以很简单地完成:

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