You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript reduce()方法的解构赋值在IE11中报错,求解决方案

问题原因分析

你遇到的错误并不是reduce()方法本身的兼容问题,而是代码里用到了两个IE11不支持的ES6特性:

  • 对象解构赋值:(r, { jahr, monat })这种从参数对象中直接提取属性的写法,IE11完全不支持
  • 箭头函数:=>语法同样是ES6新增特性,IE11没有实现这一功能

虽然reduce()从IE9开始就被支持,但这两个ES6语法才是导致报错的核心原因。

解决思路与修改后的代码

我们需要把这两个不兼容的ES6特性替换成IE11支持的ES5语法:

  1. 把箭头函数替换成普通的function声明
  2. 把对象解构改成手动从当前遍历的元素中获取jahr和monat属性
  3. 另外,IE11对const的支持存在局限(比如不允许在块级作用域重复声明等),建议把const data换成var来保证兼容性

修改后的代码如下:

var data = [{ 'jahr': '2017', 'monat': '3' }, { 'jahr': '2017', 'monat': '3' }, { 'jahr': '2017', 'monat': '4' } ];
var map = new Map(),
ergebnisMonat = data.reduce(function(r, item) {
  var jahr = item.jahr;
  var monat = item.monat;
  var datum = [monat, jahr].join('-');
  if (!map.has(datum)) {
    map.set(datum, { datum: datum, anzahl: 0 });
    r.push(map.get(datum));
  }
  map.get(datum).anzahl++;
  return r;
}, []);
console.log(ergebnisMonat);
额外说明

如果你的项目中有大量ES6代码需要兼容IE11,更高效的方式是使用Babel这类转译工具,自动将ES6+代码转译为IE11支持的ES5代码,这样就不用手动修改每一处不兼容的语法了。

内容的提问来源于stack exchange,提问作者InFlames82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:20:54