2013-02-09 15 views
6

Thư viện prototypeJS có phương thức Object.values ​​() trả về một mảng các giá trị trong một đối tượng.Object.values ​​() trong jQuery

EG:

var myObj = { 
    "key1" : "val1" 
    "key2" : "val2" 
} 
Object.values(myObj) //returns ["val1", "val2"] 

là có một phương pháp jQuery mà làm điều tương tự?

+0

Không, không có. Thật dễ dàng để tạo ra mặc dù. –

Trả lời

10

Tôi không nghĩ rằng có một phương pháp nào đó trực tiếp, nhưng bạn có thể sử dụng $.map():

$.map(myObj, function(val, key) { return val; }); //returns ["val1", "val2"] 

(Lưu ý rằng mặc dù nếu gọi lại trả null hoặc undefined cho một tài sản cho rằng hàng sẽ không được bao gồm trong mảng mới, vì vậy nếu đối tượng của bạn có thể có thuộc tính với các giá trị đó, bạn sẽ phải thực hiện theo cách khác. Thật dễ dàng để mã từ đầu, với vòng lặp for..in.)

+0

Nên là '... function (key, val) ...' thay vì '... function (val, key) ...' –

+2

@AndreiStalbe - Không cần thiết. Kiểm tra [doco] (http://api.jquery.com/jQuery.map/). – nnnnnn

3

Phương thức prototypejs 'values mở rộng Mã dựng sẵn của JavaScript Object đối tượng. Không có gì ngăn cản bạn từ làm giống nhau:

Object.values = function(object) { 
    var values = []; 
    for(var property in object) { 
    values.push(object[property]); 
    } 
    return values; 
} 


var foo = {a:1, b:2, c:3}; 
console.log(Object.values(foo)); 
// [1, 2, 3] 

Ngoài ra, bạn có thể thêm các phương pháp mô tả ở trên cho các đối tượng jQuery nếu bạn không muốn làm xáo trộn Object:

$.values = function() { ... } 
+1

tuyệt vời! đây là hoàn hảo! cảm ơn bạn rất nhiều! Nó hoàn hảo vì bạn không cần phải thêm một thư viện hoàn toàn mới vào dự án của bạn. – sksallaj

0

Underscorejs_.values phương pháp: _.values({one : 1, two : 2, three : 3}); => [1, 2, 3]

Thư viện này bổ sung JQuery rất tốt - cũng như làm việc tuyệt vời trong prototypejs.

1

Sử dụng ES6, bạn có thể làm như sau:

Object.values = x => 
     Object.keys(x).reduce((y, z) => 
      y.push(x[z]) && y, []); 

này chỉ đơn giản trả về một mảng chứa các giá trị của đối tượng. Không cần cho JQuery, _ hay bất cứ thứ gì khác.


lưu ý:Object.values() hiện đang trong dự thảo cho ES7

Sử dụng babel, lắp đặt

  • babel-sẵn-es2017
  • babel-plugin-transform-runtime

hỗ trợ cho Object.values/Object.entries cũng như các chức năng khác ES2017.

Theo khuyến cáo của các module, cấu hình các tập tin .babelrc như sau:

{ 
    "plugins": ["transform-runtime"], 
    "presets": ["es2017"] 
}