JavaScript,将对象转换成数组

33

我有一个对象:

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个回答

46

一种显而易见的方式是使用for-in循环,正如@quixoto所建议的那样,但仅供参考,并且由于您正在寻找内置方法,您可以将新的ECMAScript 5方法Object.keysArray.prototype.map配对使用,这些方法可在最新版本的浏览器中使用:

function valuesToArray(obj) {
  return Object.keys(obj).map(function (key) { return obj[key]; });
}
更新: ES2017引入了Object.values方法,该方法可以完全实现您的需求。
此外,ES2017还添加了另一个经常有用的方法Object.entries。该方法返回一个由键值对组成的数组。

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

const values = Object.values(obj);
const entries = Object.entries(obj);
console.log('values:', values);
console.log('entries:', entries);


1
不错 :) 这可能是最小的尺寸了。 - Šime Vidas
3
甚至在ES6中更短: Object.keys(obj).map(key => obj[key]) - Vexter

38

使用 Object.values 将返回数组。

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

6

没有任何内置的方法可以实现这一点。以下代码可以完成您所建议的操作,并且可能会被更聪明的函数式编程版本“缩短”,这取决于您的库,但它们都具有相同的效率。

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

6

使用jQuery,您可以使用each函数:

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

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

2

仅供娱乐而发布此内容,请勿投反对票。我并不推荐实际使用;o)

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

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

在这种简单情况下,从技术上讲是可行的。


2
完美!正是我想要的!...开个玩笑 :) - Šime Vidas

1
使用Underscore库尝试:
function valuesToArray(o) {
    return _.pairs(o);
}

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

然后结果为[["Mike", 24], ["Peter", 23]];

有关pairs方法的更多详细信息,请参见http://underscorejs.org/#pairs


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)

0

0

使用bob.js可以很容易地完成这个操作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接