首页 > 解决方案 > 扩展运算符上 Edge 中的预期标识符、字符串或数字

问题描述

我有以下代码,它通过一个键和该键上的组来减少数组。它在 Chrome/Firefox 中运行良好。

在 Edge 中,因为const newNode = { ...curr };我得到一个错误Expected identifier, string or number

在 IE 中,因为const newData = baseData.reduce((acc, curr) => {我得到了一个简单的Syntax error.

我的问题是我是否在做最好的方式和/或如何摆脱 IE/Edge 中的这些错误?

jsFiddle:https ://jsfiddle.net/xua0or5h/

const d = [
  {"teamID":1,"name":"WMH ED Medics","id":1,"username":"WHT\\andrew.bones","lastLoggedIn":null,"archive":false,"forename":"andrew","surname":"bones","band":"Band 7","role":"Developer","competency":"Kicks","employeeNumber":"123"},
  {"teamID":2,"name":"WMH ED Nursing","id":1,"username":"WHT\\andrew.bones","lastLoggedIn":null,"archive":false,"forename":"andrew","surname":"bones","band":"Band 7","role":"Developer","competency":"Kicks","employeeNumber":"123"},
  {"teamID":3,"name":"Sedation","id":1,"username":"WHT\\andrew.bones","lastLoggedIn":null,"archive":false,"forename":"andrew","surname":"bones","band":"Band 7","role":"Developer","competency":"Kicks","employeeNumber":"123"},
  {"teamID":4,"name":"Safeguarding Level 3","id":1,"username":"WHT\\andrew.bones","lastLoggedIn":null,"archive":false,"forename":"andrew","surname":"bones","band":"Band 7","role":"Developer","competency":"Kicks","employeeNumber":"123"},
  {"teamID":5,"name":"Safeguarding Level 2","id":1,"username":"WHT\\andrew.bones","lastLoggedIn":null,"archive":false,"forename":"andrew","surname":"bones","band":"Band 7","role":"Developer","competency":"Kicks","employeeNumber":"123"},
  {"teamID":6,"name":"Major Incident","id":1,"username":"WHT\\andrew.bones","lastLoggedIn":null,"archive":false,"forename":"andrew","surname":"bones","band":"Band 7","role":"Developer","competency":"Kicks","employeeNumber":"123"},
  {"teamID":4,"name":"Safeguarding Level 3","id":276,"username":"WHT\\colin.davids","lastLoggedIn":null,"archive":false,"forename":"colin","surname":"davids","band":"Band 8","role":"Chap","competency":"Pie","employeeNumber":null},
  {"teamID":5,"name":"Safeguarding Level 2","id":276,"username":"WHT\\colin.davids","lastLoggedIn":null,"archive":false,"forename":"colin","surname":"davids","band":"Band 8","role":"Chap","competency":"Pie","employeeNumber":null},
  {"teamID":6,"name":"Major Incident","id":276,"username":"WHT\\colin.davids","lastLoggedIn":null,"archive":false,"forename":"colin","surname":"davids","band":"Band 8","role":"Chap","competency":"Pie","employeeNumber":null},
  {"teamID":2,"name":"WMH ED Nursing","id":277,"username":"WHT\\edward.french","lastLoggedIn":null,"archive":false,"forename":"edward","surname":"french","band":"Band 9","role":"Lady","competency":"Pizza","employeeNumber":null},
  {"teamID":3,"name":"Sedation","id":277,"username":"WHT\\edward.french","lastLoggedIn":null,"archive":false,"forename":"edward","surname":"french","band":"Band 9","role":"Lady","competency":"Pizza","employeeNumber":null},
  {"teamID":4,"name":"Safeguarding Level 3","id":277,"username":"WHT\\edward.french","lastLoggedIn":null,"archive":false,"forename":"edward","surname":"french","band":"Band 9","role":"Lady","competency":"Pizza","employeeNumber":null},
  {"teamID":8,"name":"Digital Team","id":281,"username":"WHT\\gail.johnson","lastLoggedIn":null,"archive":false,"forename":"stewart","surname":"Johnson","band":"Band 91","role":"Solutions Developer Manager","competency":"Ninja","employeeNumber":"23546329"},
  {"teamID":1,"name":"WMH ED Medics","id":283,"username":"WHT\\debra.morris","lastLoggedIn":null,"archive":false,"forename":"debra","surname":"morris","band":"Band 7","role":"Senior Solutions Developer","competency":"LOL","employeeNumber":"23546205"},
  {"teamID":2,"name":"WMH ED Nursing","id":283,"username":"WHT\\debra.morris","lastLoggedIn":null,"archive":false,"forename":"debra","surname":"morris","band":"Band 7","role":"Senior Solutions Developer","competency":"LOL","employeeNumber":"23546205"},
  {"teamID":3,"name":"Sedation","id":283,"username":"WHT\\debra.morris","lastLoggedIn":null,"archive":false,"forename":"debra","surname":"morris","band":"Band 7","role":"Senior Solutions Developer","competency":"LOL","employeeNumber":"23546205"},
  {"teamID":4,"name":"Safeguarding Level 3","id":283,"username":"WHT\\debra.morris","lastLoggedIn":null,"archive":false,"forename":"debra","surname":"morris","band":"Band 7","role":"Senior Solutions Developer","competency":"LOL","employeeNumber":"23546205"},
  {"teamID":5,"name":"Safeguarding Level 2","id":283,"username":"WHT\\debra.morris","lastLoggedIn":null,"archive":false,"forename":"debra","surname":"morris","band":"Band 7","role":"Senior Solutions Developer","competency":"LOL","employeeNumber":"23546205"},
  {"teamID":6,"name":"Major Incident","id":283,"username":"WHT\\debra.morris","lastLoggedIn":null,"archive":false,"forename":"debra","surname":"morris","band":"Band 7","role":"Senior Solutions Developer","competency":"LOL","employeeNumber":"23546205"}
];

function reduceJson(baseData,k) {
  const newData = baseData.reduce((acc, curr) => {
    const node = acc.find((item) => item.id === curr.id);
    if (node) {
      node[k].push(curr[k]);
    } else {
      const newNode = { ...curr };
      newNode[k] = [curr[k]];
      acc.push(newNode)
    }
    return acc;
  }, []);
  return newData;
}
console.log(reduceJson(d,"name"))

更新

扩展运算符现在已排序

const newNode = {};
Object.assign(newNode, curr);

标签: javascript

解决方案


IE 和 Edge 是非常不同的东西。此外,如果您在使用 Edge 时遇到该错误,则说明您使用的是非常旧的 Edge 版本。

IE 几乎不支持任何 ES2015+。这意味着它不支持箭头函数 (ES2015) 或属性扩展语法 (ES2018)。它对 和 的支持有限且不let完整const。而已。

Edge v44(“Legacy Edge”)和更早的版本支持一些 ES2015+,但 IIRC 不支持属性扩展语法。

Edge v79 及更高版本(v44 和 v79 之间没有版本),又名 Chromium Edge,是基于 Chromium 的,这意味着它们具有 V8 JavaScript 引擎,并支持属性传播。

如果您需要支持 IE,则无需使用 ES2015+ 功能,或者使用像 Babel 这样的转译器/编译器将它们转换为(大致)ES5 级别的语法,以便 IE 可以运行代码。

如果您需要支持 Legacy Edge,这是一个类似的任务,但是您可以使用许多 ES2015+ 功能(例如箭头函数)。只是没有财产传播和后来版本的一些其他功能。例如,Legacy Edge 可以处理用以下方式替换该属性分布:

const newNode = Object.assign({}, curr);

不过IE不支持Object.assign。(但它可以是 polyfill。)


推荐阅读