【问题标题】:JavaScript destructuring in reduce() method not working with Internet Explorer 11? [duplicate]reduce() 方法中的 JavaScript 解构不适用于 Internet Explorer 11? [复制]
【发布时间】:2018-06-15 01:57:15
【问题描述】:

我使用 JavaScript reduce() 方法来计算有多少条目具有相同的值。

如果我将代码与 Firefox 52 浏览器一起使用,一切正常。但是如果我在 Internet Explorer 11 中使用代码,调试器会告诉我,脚本中有错误:

const data = [{
    'jahr': '2017',
    'monat': '3'
  },
  {
    'jahr': '2017',
    'monat': '3'
  },
  {
    'jahr': '2017',
    'monat': '4'
  }
];

map = new Map,
  ergebnisMonat = data.reduce((r, {
    jahr,
    monat
  }) => {
    var datum = [monat, jahr].join('-');
    if (!map.has(datum)) {
      map.set(datum, {
        datum,
        anzahl: 0
      });
      r.push(map.get(datum));
    }
    map.get(datum).anzahl++;
    return r;
  }, []);

console.log(ergebnisMonat);

SCRIPT1003: ':' 预期

调试器告诉我这里应该有“:”:

ergebnisMonat = data.reduce((r, {
        jahr**here ERROR**,
        monat

reduce() 方法从 IE 9 版本开始就与 IE 兼容。所以我不知道为什么它在 Firefox 中有效,而在 IE 11 中无效。有什么想法吗?

感谢您的帮助。

【问题讨论】:

标签: javascript arrow-functions destructuring


【解决方案1】:

根据 destructuring docs,它在 IE 中根本不支持,因此

data.reduce((r, {
    jahr,
    monat
  })

不支持,另外Arrow functions在IE中不支持,所以需要使用常规函数定义

ergebnisMonat = data.reduce(function(r, obj){
    var datum = [obj.monat, obj.jahr].join('-');
    if (!map.has(datum)) {
      map.set(datum, {
        datum,
        anzahl: 0
      });
      r.push(map.get(datum));
    }
    map.get(datum).anzahl++;
    return r;
  }, []);

【讨论】:

  • 现在调试器说这里有同样的错误:map.set(datum, { datum**ERROR**, anzahl: 0
  • 所以你需要map.set(datum, { datum: datum, anzahl: 0 });
  • 非常感谢!
猜你喜欢
  • 2013-07-25
  • 2013-12-19
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 2023-04-06
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多