2016-01-29 21 views
12

Patrzę na stage 3 proposal of Object.values/Object.entries i bardzo chciałbym go użyć w moim bieżącym projekcie JavaScript.Obsługa Babel dla Object.entries

Nie mogę jednak ustalić, czy istnieje jakieś ustawienie Babel, które je obsługuje. Ponieważ repozytorium GitHub, o którym była mowa powyżej, mówi, że jest to propozycja dla etapu 3, zakładałem, że będzie to część babel-preset-stage-3, ale wygląda na to, że nie.

Czy istnieje jakieś ustawienie presetu Babel (lub nawet wtyczka?), Które pozwala mi dziś używać Object.entries?

+1

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

+0

@FelixKling: Dziękuję, ale obawiam się, że tak naprawdę nie wiem, co zrobić z informacjami, które łączysz! – damd

+2

Babel polyfill używa po prostu core-js, ale nie jestem pewien, które funkcje. Jeśli chcesz tylko obsługiwać 'Object.entries', po prostu załaduj do tego polyfill core-js. –

Odpowiedz

21

Korzystanie babel zainstalowanie

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

daje wsparcie dla Object.values/Object.entries jak również inne funkcje ES2017.

Zgodnie z zaleceniem modułów, konfigurować .babelrc z następujących czynności:

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

Nie widzę żadnej wzmianki o obsłudze 'Object.entries' w https://babeljs.io/docs/plugins/preset-es2017/. Czy wsparcie zostało przeniesione do innego ustawienia? https://github.com/bettiolo/babel-preset-es2017/issues/37 wydaje się potwierdzać, że ta funkcjonalność nie jest objęta ustawieniem wstępnym. – Gili

+0

Dla węzła jest to, gdy używasz babel. Czy próbowałeś? – petersv

+2

Byłem kierowany do przeglądarki. W tym kontekście wymagane jest korzystanie z https://babeljs.io/docs/usage/polyfill/. Czy możesz zaktualizować odpowiedź, aby odpowiedzieć na pytanie, co użytkownicy powinni robić dla węzła a przeglądarki? – Gili

7

Co zrobiłem było zainstalować core-js a potem po prostu nazwać to w górnej części mojego pliku:

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

To sprawiło Object.entries dostępne. Kredyty na @FelixKling.

5

Utworzyłem tych metod sobie tak:

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, []); 

Te tablice powrotne, które reprezentują oczekiwane zachowanie na obiektach podobnych do JSON.

Zastosowanie:

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

Zamiast tego możesz użyć 'map' zamiast' reduce', co jest nieco prostsze: '.map (key => object [key])' (gdzie 'object' to twoje' x'). Zakładam też, że idziesz na wydajność w kwestii czytelności, podając zmienne nazwy jednoliterowe, ale ponieważ jest to odpowiedź edukacyjna, sugerowałbym używanie nazw logicznych i dodawanie komentarza na temat skracania ich pod kątem wydajności. – ArneHugo

Powiązane problemy