2016-08-03 26 views
41

Tôi có một đối tượng đơn giản như hình dưới đây:lỗi chưa gặp: Object.values ​​không phải là một hàm JavaScript

var countries = 
{ 
"Argentina":1, 
"Canada":2, 
"Egypt":1, 
}; 

tôi cần phải tạo ra hai mảng. Mảng đầu tiên là một mảng của tất cả các khóa từ đối tượng. Tôi đã tạo mảng này bằng cách:

var labels = Object.keys(countries); 

Điều này hoạt động tốt. Tôi có được một loạt các quốc gia. Bây giờ khi tôi cố gắng tạo ra một mảng từ các giá trị ...

var labels = Object.values(countries); 

tôi nhận được lỗi này: Uncaught TypeError: Object.values is not a function JavaScript

Tôi không biết những gì tôi đang làm sai. Tôi console.log countries trước khi tôi khai báo labels và sau đó và đối tượng vẫn giữ nguyên. Làm cách nào để sử dụng đúng cách Object.values()?

+0

trình duyệt bạn đang sử dụng gì, bởi vì theo MDN nó có thể không được [hỗ trợ] (https://developer.mozilla.org/en -US/docs/Web/JavaScript/Tham chiếu/Global_Objects/Đối tượng/giá trị # Browser_compatibility) –

+0

@MarkC. Tôi đang sử dụng Google Chrome 52.0.2743.82 –

Trả lời

128

.values không được hỗ trợ trong nhiều trình duyệt - bạn có thể sử dụng .map để có được một mảng của tất cả các giá trị:

var vals = Object.keys(countries).map(function(key) { 
    return countries[key]; 
}); 

Xem MDN doc: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values hay doc chính thức: https://tc39.github.io/ecma262/#sec-object.values (nhờ @evolutionxbox sửa chữa)

+1

Lạ. '.values' có vẻ rất mạnh mẽ. Cảm ơn bạn đã cho tôi thấy một sự thay thế. Nó có ý nghĩa hơn nhiều bây giờ! –

+0

(psst, mdn trong khi tuyệt vời không phải là tài liệu "chính thức" - https://tc39.github.io/ecma262/#sec-object.values) – evolutionxbox

+0

@evolutionxbox - Gah, thx. Thực hiện chỉnh sửa! – tymeJV

1

Dường như vấn đề này được khắc phục trong phiên bản Safari mới nhất. Tôi đã gặp vấn đề tương tự. Sự cố này xảy ra trong phiên bản trình duyệt 9.0.1 và không xảy ra trong 10.1.1

chỉnh sửa để thêm tệp đính kèm;

[snippet][1] 
[object value][2] 
[browser version][3] 
+1

Bạn có tài liệu tham khảo mà bạn có thể chia sẻ cho thông tin này không? Báo cáo lỗi hay gì đó? –

+0

Tôi không có tài liệu tham khảo. Các hệ thống mac mang phiên bản 9.0x liên tục gây ra sự cố. Nhưng hệ thống của tôi mang 10.1.1 không gây ra vấn đề tương tự. – Venkata

1

Sử dụng "for ... in" như đã thảo luận ở mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values

Đây là mã tôi đã sử dụng:

function Object_values(obj) { 
    let vals = []; 
    for (const prop in obj) { 
     vals.push(obj[prop]); 
    } 
    return vals; 
} 

// usage 
let obj = {k1: 'v1', k2: 'v1', k3: 'v1'}; 

console.log(Object_values(obj));    // prints [ 'v1', 'v1', 'v1' ] 
// OR 
console.log(Object_values(obj).join(', ')); // prints v1, v1, v1 
0

Tôi nghĩ vấn đề trong việc hỗ trợ biên soạn trên khả năng tương thích trình duyệt, Bạn có thể sử dụng bản đồ để đạt được điều tương tự.

var countries = [ 
 
    { 
 
"Argentina": 1, 
 
"Canada": 2, 
 
"Egypt": 1, 
 
"india": 1 
 
    }, 
 
    { 
 
"Argentina": 1, 
 
"india": 1, 
 
"US": 2, 
 
"UK": 1, 
 

 
    } 
 
]; 
 

 
var unpick = countries.map(d=>{ return Object.keys(d) }); 
 
console.log(unpick)

var countries = [ 
 
    { 
 
"Argentina": 1, 
 
"Canada": 2, 
 
"Egypt": 1, 
 
"india": 1 
 
    }, 
 
    { 
 
"Argentina": 1, 
 
"india": 1, 
 
"US": 2, 
 
"UK": 1, 
 

 
    } 
 
]; 
 

 
var unpick = countries.map(d=>{ return Object.values(d) }); 
 
console.log(unpick)

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