Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.entries()Internet Explorer和ReactJS的备选方案_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript Object.entries()Internet Explorer和ReactJS的备选方案

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

好吧,我已经构建了一个web应用程序几个星期了,一切都很好。我谈到了我必须在Internet Explorer中测试的部分,在出现的所有问题中(除了一个之外都是固定的),Object.entries()不受支持

我一直在做一些研究,试图找到一个简单的替代方案,但一点运气都没有

更具体地说,我从API中引入了一个对象,为了填充
字段的选项,我必须过滤一些信息,如下所示:

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';