转换reduce函数以使用IE

时间:2017-07-24 15:37:24

标签: javascript internet-explorer ecmascript-6 reduce

好吧,几个月前我得到了一些帮助,提出了一个解决方案来保持数组中元素的计数:Loop through multiple array and keep count of each element

此解决方案对我来说非常有效,直到我意识到它使用了ES6 IE 11不支持的var b = data.reduce((acc, cur) => { cur.ProductHandlingTypes.map(({ Name }) => Name).forEach(n => acc[n] = (acc[n] || 0) + 1); return acc; }, {}); 。我尝试将其转换为使用函数而不是箭头函数,以便它可以在所有浏览器中运行,但是我遇到了一些问题。

以下是目前在IE中无效的代码:

diamonds %>% group_by(cut, color) %>% 
            do(model=lm(price~carat, data=.)) %>%
            mutate(r2 = summary(model)$adj.r.squared) %>% 
            select(-model)

如果有人可以指导我在这里需要更改的内容,以便它在IE中工作那将是很棒的!

2 个答案:

答案 0 :(得分:3)

IE 11不支持箭头函数[1],也不支持解构[2],因此将其转换为ES5语法:

var b = data.reduce(function(acc, cur) {
  cur.ProductHandlingTypes
    .map(function(obj) {
      return obj.Name
    })
    .forEach(function(n) {
      return acc[n] = (acc[n] || 0) + 1
    })

  return acc
}, {});

[1] http://caniuse.com/#feat=arrow-functions

[2] http://kangax.github.io/compat-table/es6/#test-destructuring

答案 1 :(得分:1)

删除解构。

cur.ProductHandlingTypes.map((obj) => obj.Name).forEach(...