Поддержка Babel для Object.entries
Я смотрю на предложение стадии 3 Object.values /Object.entries, и я действительно хотел бы использовать его в моем текущем проекте JavaScript.
Однако я не могу понять, есть ли какой-нибудь пресет Babel, который поддерживает его. Поскольку репозиторий GitHub, связанный выше, говорит, что это предложение этапа 3, я предположил, что оно будет частью babel-preset-stage-3, но, похоже, это не так.
Есть ли какой-нибудь пресет Babel (или даже плагин?), Который позволяет мне использовать Object.entries сегодня?
4 ответа
Использование Babel, установка
оказывает поддержку Object.values
/Object.entries
а также другие функциональные возможности ES2017.
В соответствии с рекомендациями модулей настройте .babelrc следующим образом:
{
"plugins": ["transform-runtime"],
"presets": ["es2017"]
}
Что я сделал, так это установил core-js
а затем просто позвоните в начало моего файла:
require('core-js/fn/object/entries');
Это сделано Object.entries
имеется в наличии. Кредиты @FelixKling.
Обновление:
Как отмечено в комментариях, вы можете улучшить производительность, используя 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)
)
Другое альтернативное решение, которое я нашел в конце 2020 года, работает для IE11.
npm install --save-dev babel-plugin-transform-es2017-object-entries
а затем добавить в package.json
"babel": {
"plugins": [
"transform-es2017-object-entries"
]
}