2011-01-05 43 views
16

Tôi đã có một đối tượng:JavaScript, chuyển đối tượng vào mảng

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

Tôi muốn tạo ra một mảng chứa các giá trị của đối tượng. Các khóa (tên khóa) có thể được bỏ qua:

[24, 23, 33, 12, 31] 

Thứ tự của các giá trị KHÔNG quan trọng!

Một giải pháp (rõ ràng) sẽ làm có một hàm mang theo các giá trị và đặt chúng vào một mảng:

var arr = valuesToArray(obj); 

tôi sẽ chấp nhận như một chức năng là câu trả lời. Tuy nhiên, tôi sẽ hài lòng hơn nếu có một hàm API (ECMAScript, jQuery, trình duyệt cụ thể, ...) có thể thực hiện điều này. Có một điều như vậy?

Trả lời

30

Cách rõ ràng sẽ được làm một phi trong vòng lặp, như @quixoto gợi ý, nhưng chỉ dành riêng cho các hồ sơ, và kể từ khi bạn đang tìm kiếm một built-in cách, bạn có thể ghép mới ECMAScript 5 phương pháp Object.keysArray.prototype.map, có sẵn trên latest browsers:

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

ES5 trông giống như vui vẻ, không có? – jAndy

+1

Nice :) Đây có lẽ là nhỏ như nó có thể có thể nhận được. –

+1

Hoặc thậm chí ngắn hơn trong ES6: 'Object.keys (obj) .map (key => obj [key])' – Vexter

5

Không có cách nào tích hợp để thực hiện việc này ở bất cứ đâu. Sau đây là những gì bạn đề nghị, và có thể được "rút ngắn" thành các phiên bản lập trình chức năng thông minh hơn tùy thuộc vào thư viện của bạn, nhưng tất cả chúng đều có cùng hiệu quả.

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

Hãy thử điều này:

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

Một số thư viện có cái gì để làm điều này (chẳng hạn như "giá trị" nguyên mẫu của chức năng), nhưng chúng thực sự chỉ là hàm bao quanh một chức năng mà vòng qua và trả về giá trị của đối tượng.

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

6

với jQuery bạn có thể sử dụng mỗi chức năng:

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

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

Đăng nội dung này thật thú vị. Lưu downvotes của bạn. Tôi không đề xuất nó thực sự được sử dụng. ; o)

Ví dụ:http://jsfiddle.net/WGpXX/

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

Về mặt kỹ thuật công trình trong trường hợp đơn giản này.

+1

Hoàn hảo! Chính xác những gì tôi đang tìm kiếm! ... chỉ đùa thôi :) –

0

Sử dụng bob.js này có thể được thực hiện khá đơn giản:

1

Sử dụng gạch lib thử:

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

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

Sau đó, kết quả là [[ "Mike", 24], [ "Peter" , 23]]; chi tiết

Thông tin thêm về các cặp phương pháp ở đây: http://underscorejs.org/#pairs

Các vấn đề liên quan