Babel支持Object.entries

时间:2016-01-29 17:08:25

标签: javascript babeljs ecmascript-next

我正在查看stage 3 proposal of Object.values/Object.entries,我真的很想在我当前的JavaScript项目中使用它。

但是,我无法弄清楚是否有支持它的Babel预设。由于上面链接的GitHub存储库说它是第3阶段提案,我认为它将是babel-preset-stage-3的一部分,但似乎没有。

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

4 个答案:

答案 0 :(得分:28)

使用babel,安装

  1. babel-preset-es2017
  2. babel-plugin-transform-runtime
  3. 支持Object.values / Object.entries以及其他 ES2017 功能。

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

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

答案 1 :(得分:9)

我所做的是安装require('core-js/fn/object/entries'); ,然后在我的文件顶部调用它:

Object.entries

这使 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recycler_view); //first recycler mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager( new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false)); OkHttpHandler handler = new OkHttpHandler( this, new OkHttpHandler.MyInterface() { @Override public void myMethod(ArrayList result) { mAdapter = new MyAdapter(result,this); mAdapter.notifyDataSetChanged(); mRecyclerView.setAdapter(mAdapter); // GridViewAdapter adapter = new GridViewAdapter(getApplicationContext(), R.layout.grid_item_layout, result); // adapter.notifyDataSetChanged(); // mGridView.setAdapter(adapter); } }); 可用。归功于@FelixKling。

答案 2 :(得分:5)

<强>更新

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

用法:

&#13;
&#13;
// 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)
)
&#13;
&#13;
&#13;

答案 3 :(得分:0)

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

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

然后添加到package.json

"babel": {
    "plugins": [
        "transform-es2017-object-entries"
    ]
}