我正在查看stage 3 proposal of Object.values/Object.entries,我真的很想在我当前的JavaScript项目中使用它。
但是,我无法弄清楚是否有支持它的Babel预设。由于上面链接的GitHub存储库说它是第3阶段提案,我认为它将是babel-preset-stage-3的一部分,但似乎没有。
是否有任何Babel预设(甚至是插件?)让我今天使用Object.entries?
答案 0 :(得分:28)
使用babel,安装
支持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;
用法:
// 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;
答案 3 :(得分:0)
我在 2020 年底找到的另一种替代解决方案,适用于 IE11。
npm install --save-dev babel-plugin-transform-es2017-object-entries
然后添加到package.json
"babel": {
"plugins": [
"transform-es2017-object-entries"
]
}