开发者

JavaScript, transform object into array

I've got an object:

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

I want to create an array that holds the values of the object. The keys (key names) can be disregarded:

[24, 23, 33, 12, 31]

The order of the values is NOT important!

One solution (obviously) would be do have a function that takes the values and puts them into an array:

var arr = valuesToArray(obj); 
开发者_开发知识库

I will accept such a function as the answer. However, I would be more pleased if there would be an API function (ECMAScript, jQuery, browser-specific, ...) that could do this. Is there such a thing?


The obvious way would be to do a for-in loop, as @quixoto suggests, but just for the record, and since you are looking for a built-in way, you could pair the new ECMAScript 5 methods Object.keys and Array.prototype.map, available on latest browsers:

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

UPDATE: ES2017 introduced the Object.values method, which does exactly what you want.

Additionally, ES2017 adds another often useful method, Object.entries. This method returns an array of key-value pairs.

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);


Use Object.values it will return array.

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


There's no built-in way to do this anywhere. The following does what you suggest, and may be "shortened" into more clever functional-programming versions depending on your library, but they'll all have the same efficiency.

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


With jQuery you could use the each function:

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

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


Posting this strictly for fun. Save your downvotes. I'm not recommending it actually be used. ;o)

Example: http://jsfiddle.net/WGpXX/

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

Technically works in this simple case.


Using the Underscore lib try:

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

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

Then the result is [ ["Mike", 24], ["Peter", 23] ];

More detail on the pairs method here: http://underscorejs.org/#pairs


Try this:

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)


Some libraries have something to do this (such as prototype's "values" function), but they're really just wrappers around a function that loops over and returns the values of the object.

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


Using bob.js this can be done pretty simply:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜