2016-01-29 24 views
12

Tôi đang xem stage 3 proposal of Object.values/Object.entries và tôi thực sự muốn sử dụng nó trong dự án JavaScript hiện tại của mình.Hỗ trợ Babel cho Object.entries

Tuy nhiên, tôi không thể tìm ra liệu có bất kỳ cài đặt trước Babel nào hỗ trợ nó hay không. Kể từ khi kho GitHub được liên kết ở trên nói rằng đó là một đề xuất giai đoạn 3, tôi cho rằng nó sẽ là một phần của babel-preset-stage-3, nhưng có vẻ như không.

Có bất kỳ cài đặt trước Babel nào (hoặc thậm chí là plugin?) Cho phép tôi sử dụng Object.entries ngay hôm nay không?

+1

https://babeljs.io/docs/usage/polyfill/, https://github.com/zloirock/core-js#ecmascript-7 -proposals –

+0

@ FelixKling: Cảm ơn bạn, nhưng tôi e rằng tôi không thực sự biết phải làm gì với thông tin bạn đã liên kết! – damd

+2

Babel polyfill chỉ đơn giản sử dụng lõi-js, nhưng tôi không chắc chắn tính năng nào. Nếu bạn chỉ muốn hỗ trợ 'Object.entries', chỉ cần nạp polyfill lõi-js cho điều đó. –

Trả lời

21

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

  1. babel-preset-es2017
  2. babel-plugin-transform-runtime

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

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

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

Tôi không thấy đề cập đến sự hỗ trợ 'Object.entries' trong https://babeljs.io/docs/plugins/preset-es2017/. Hỗ trợ đã được chuyển sang một giá trị đặt trước khác chưa? https://github.com/bettiolo/babel-preset-es2017/issues/37 dường như để xác nhận chức năng này không được cài sẵn. – Gili

+0

Đối với nút, khi sử dụng babel. Bạn đã thử chưa – petersv

+2

Tôi đã nhắm mục tiêu một trình duyệt. Trong bối cảnh đó, bạn được yêu cầu sử dụng https://babeljs.io/docs/usage/polyfill/. Bạn có thể vui lòng cập nhật câu trả lời để giải quyết những gì người dùng nên làm cho nút vs trình duyệt không? – Gili

7

Những gì tôi đã làm là cài đặt core-js và sau đó chỉ cần gọi này ở phía trên cùng của tập tin của tôi:

require('core-js/fn/object/entries'); 

Điều này làm Object.entries sẵn. Tín dụng cho @FelixKling.

5

tôi đã tạo ra những phương pháp này bản thân mình như thế này:

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

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

Những mảng trở lại đại diện cho hành vi mong đợi trên các đối tượng giống như JSON.

Cách sử dụng:

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

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

 

 
const a = { 
 
    key: "value", 
 
    bool: true, 
 
    num: 123 
 
} 
 

 
console.log(
 
    Object.values(a) 
 
) 
 

 
console.log(
 
    Object.entries(a) 
 
)

+3

Bạn thực sự có thể sử dụng 'map' thay vì' reduce' ở đây, đơn giản hơn một chút: '.map (key => object [key])' (trong đó 'object' là' x') của bạn. Ngoài ra, tôi giả sử bạn sẽ cho hiệu suất trên khả năng đọc khi đưa các biến một tên chữ, nhưng vì đây là một câu trả lời giáo dục tôi đề nghị sử dụng tên logic và thêm một bình luận về rút ngắn chúng cho hiệu suất. – ArneHugo