24

我正在查看Object.values/Object.entries 的第 3 阶段提案,我真的很想在我当前的 JavaScript 项目中使用它。

但是,我不知道是否有任何 Babel 预设支持它。由于上面链接的 GitHub 存储库说这是第 3 阶段的提案,我认为它会成为 babel-preset-stage-3 的一部分,但似乎不是。

是否有任何 Babel 预设(甚至插件?)可以让我今天使用 Object.entries?

4

4 回答 4

33

使用babel,安装

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

支持Object.values/Object.entries以及其他 *ES20** 功能。

根据模块的建议,使用以下内容配置.babelrc

{
  "plugins": ["transform-runtime"],
  "presets": ["env"]
}
于 2016-04-29T08:29:05.223 回答
14

我所做的是安装core-js,然后在我的文件顶部调用它:

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

这使得Object.entries可用。感谢@FelixKling。

更新

在 core-js@3 中,导入路径发生了变化:

require('core-js/features/object/entries');
于 2016-02-13T16:01:22.873 回答
6

更新

如评论中所述,您可以通过使用该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)
)

于 2016-05-26T10:21:33.827 回答
0

我在 2020 年底找到的另一个替代解决方案适用于 IE11。

npm install --save-dev babel-plugin-transform-es2017-object-entries

然后添加到 package.json

"babel": {
    "plugins": [
        "transform-es2017-object-entries"
    ]
}
于 2020-12-24T02:34:30.593 回答