Поддержка Babel для Object.entries

Я смотрю предложение 3-го этапа Object.values ​​/Object.entries, и я действительно хотел бы использовать его в своем текущий проект JavaScript.

Однако я не могу понять, есть ли какой-либо предустановленный Babel, который его поддерживает. Поскольку связанный выше репозиторий GitHub говорит, что это предложение на этапе 3, я предположил, что он будет частью Babel-preset-stage-3, но это не так.

Есть ли какой-либо предустановленный Babel (или даже плагин?), который позволяет мне использовать Object.entries сегодня?

Ответ 1

Использование babel, установка

  1. столпотворение-предустановленным окр
  2. столпотворение-плагин-преобразование-среда

поддерживает Object.values/Object.entries, а также другие функции * ES20 **.

В соответствии с рекомендациями модулей настройте .babelrc следующим образом:

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

Ответ 2

Что я сделал, это установить core-js, а затем просто вызвать это в верхней части моего файла:

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

Это сделало Object.entries доступным. Кредиты для @FelixKling.

Ответ 3

Обновление:

Как отмечено в комментариях, вы можете улучшить производительность, используя функцию map вместо reduce.

Обратите внимание, что в коде учитывается регистр (object != Object).

// Object.values

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

Object.values = Object.values || objectToValuesPolyfill;

// Object.entries

var objectToEntriesPolyfill = function(object) {
    return Object
             .keys(object)
             .map(
                  function(key) {
                    return [key, object[key]];
                  }
              );
}

Object.entries = Object.entries || objectToEntriesPolyfill;

Использование:

// es6

Object.values = Object.values || (x => Object.keys(x).map(k => x[k]));
Object.entries = Object.entries || (x => Object.keys(x).map(k => [k, x[k]]));

// es5

Object.values = Object.values || function(x){ 
    return Object.keys(x).map(function(k){ 
        return x[k];
    })
};

Object.entries = Object.values || function(x){ 
    return Object.keys(x).map(function(k){ 
        return [k, x[k]];
    })
};


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

console.log(
  Object.values(a)
)

console.log(
  Object.entries(a)
)