Javascript Object.entries()Internet Explorer和ReactJS的备选方案
好吧,我已经构建了一个web应用程序几个星期了,一切都很好。我谈到了我必须在Internet Explorer中测试的部分,在出现的所有问题中(除了一个之外都是固定的),Object.entries()不受支持 我一直在做一些研究,试图找到一个简单的替代方案,但一点运气都没有 更具体地说,我从API中引入了一个对象,为了填充Javascript Object.entries()Internet Explorer和ReactJS的备选方案,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,好吧,我已经构建了一个web应用程序几个星期了,一切都很好。我谈到了我必须在Internet Explorer中测试的部分,在出现的所有问题中(除了一个之外都是固定的),Object.entries()不受支持 我一直在做一些研究,试图找到一个简单的替代方案,但一点运气都没有 更具体地说,我从API中引入了一个对象,为了填充字段的选项,我必须过滤一些信息,如下所示: Object.entries(this.state.filterInfo.sectorId).map(this.eachOptio
字段的选项,我必须过滤一些信息,如下所示:
Object.entries(this.state.filterInfo.sectorId).map(this.eachOption)
// Function
eachOption = ([key, val], i) => {
return(
<option value={val} key={i}>{val}</option>
);
}
Object.entries(this.state.filterInfo.sectorId).map(this.eachOption)
//作用
每个选项=([key,val],i)=>{
返回(
{val}
);
}
因此,除了Internet Explorer之外,其他一切都正常工作。问题是,在这个特定组件中,我渲染了30多个
字段。如果有一个解决方案,不需要我重建一切,那将是惊人的
有简单的解决办法吗?有办法解决这个问题吗
提前感谢。像这样使用填隙片/多边形填充:当您想在旧浏览器中使用较新的API时,通常首先要研究是否有简单的多边形填充。而且,可以肯定的是,
Object.entries()
有一个非常简单的多边形填充,如图所示:
上面的答案不一定是新的,只是完成相同任务的不同代码 希望这能帮助那些偶然发现这一点的人
//另一种方法
常量entriesPolyFill=(obj)=>Object.keys(obj.map)(key=>[key,obj[key]]);
//同样的事情,但更容易阅读
功能entriesPolyFill(obj){
常量键=对象键(obj);
const keyValuePairs=keys.map(key=>{
常量值=对象[键];
返回[键,值];
});
返回键值对;
};
//如果不想更改对象类,则可能的用法:
//例如:需要键值对来迭代
常量条目=(Object.entries?Object.entries(obj):entriesPolyFill(obj));
//然后对数组执行任何操作
//-->entries.map()、entries.filter()等。。
//你也可以将整个过程移动到一个函数中
//并且总是调用函数,这样就不必
//在代码中写入多余的三元运算符:
//--在其他位置的utils文件中。。。
导出函数getEntries(obj){
返回Object.entries?Object.entries(obj):Object.keys(obj.map)(key=>[key,obj[key]]);
}
//无论您需要在何处获取项目条目
从“”导入{getEntries};
...
const entries=getEntries(obj)代码>以下是一个简洁的多边形填充,它以一种相当巧妙的方式使用:
if(!Object.entries)
Object.entries = function(obj) {
return Object.keys(obj).reduce(function(arr, key) {
arr.push([key, obj[key]]);
return arr;
}, []);
}
这对我很有用。你有没有尝试过加载polyfill?这是处理此类缺失函数的标准方法。该方法非常简单。Object.keys(this.state.filterInfo.sectorId).map(this.eachOption,this.state.filterInfo.sectorId)
在回调中得到的值为this[key]
在this-worked中显示了一个多边形填充,而不是“core js/es6/Object”默认情况下添加到angular cli生成项目的pollyfills.ts中
if(!Object.entries)
Object.entries = function(obj) {
return Object.keys(obj).reduce(function(arr, key) {
arr.push([key, obj[key]]);
return arr;
}, []);
}
import 'core-js/es7/object';