javascript - 扩展运算符上 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);
解决方案
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。)
推荐阅读
- android - for循环在android中没有给我正确的结果
- ruby-on-rails - 如何使用神社获取照片缓存数据
- javascript - React Native Reanimated 并行
- c# - (WPF, Data Binding, DependencyProperty) Can I get only the list of specific member variables in the list?
- qt - mongodb c ++ QString到kvp()值
- c# - 忽略共享控制器中的重定向
- operating-system - 操作系统:我如何用叉子增加孩子
- powershell - Windows Defender 混淆批处理脚本命令
- node.js - gitlab ci - 一起引用和更改不起作用
- typescript - 角度材料自动完成有此错误“错误错误:ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改。”