簡體   English   中英

JavaScript,將對象轉換為數組

[英]JavaScript, transform object into array

我有一個對象:

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

我想創建一個保存對象值的數組。 可以忽略鍵(鍵名):

[24, 23, 33, 12, 31]

值的順序並不重要!

一個解決方案(顯然)是有一個函數來獲取值並將它們放入一個數組中:

var arr = valuesToArray(obj); 

我會接受這樣的功能作為答案。 但是,如果有一個 API 函數(ECMAScript、jQuery、特定於瀏覽器,...)可以做到這一點,我會更高興。 有這樣的事情嗎?

顯而易見的方法是執行 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);

使用Object.values它將返回數組。

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

沒有內置的方法可以在任何地方執行此操作。 以下按照您的建議進行操作,並且可能會根據您的庫被“縮短”為更聰明的函數式編程版本,但它們都具有相同的效率。

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

使用 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);
});

發布此嚴格為了好玩。 保存您的反對票。 我不建議實際使用它。 ;o)

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

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

在這種簡單的情況下,技術上可行。

使用下划線庫嘗試:

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

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

那么結果是 [ ["Mike", 24], ["Peter", 23] ];

關於pairs方法的更多細節: http : //underscorejs.org/#pairs

使用bob.js這可以非常簡單地完成:

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

嘗試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM