javascript - 支持 es5 中的解构赋值问题
问题描述
我对使用 es5 不支持的解构赋值的部分代码有疑问。(用 gulp 构建问题)。
我已经删除了所有 es6 箭头并使用了函数,但我不知道如何将解构分配恢复为 ES5:
var result2 = Object.values(
zones.reduce(function (a, {id,name,card,request,res}) {
a[id] || (a[id] = {id, card, name, unique_cards: new Set(), nb_carte: 0, request: {}, res: {} });
a[id].unique_cards.add(card);
a[id].nb_carte = a[id].unique_cards.size;
Object.keys(request).forEach(function (k) {
(a[id].request[k] = (a[id].request[k] || 0) + request[k])
});
Object.keys(res).forEach(function (k) {
(a[id].res[k] = (a[id].res[k] || 0) + res[k])
});
return a;
}, Object.create(null))
);
实际错误是:
当前 JavaScript 版本不支持解构赋值
解决方案
删除解构,并将原始对象分配给变量(o
在示例中)。然后手动将所需的属性分配给变量。
正如@Dehli 指出的那样,您还应该将速记属性名称更改为手动分配。
var result2 = Object.values(
zones.reduce(function(a, o) {
var id = o.id, name = o.name, card = o.card, request = o.request, res = o.res;
a[id] || (a[id] = {
id: id, // change from shorthand property name
card: card, // change from shorthand property name
name: name, // change from shorthand property name
unique_cards: new Set(),
nb_carte: 0,
request: {},
res: {}
});
a[id].unique_cards.add(card);
a[id].nb_carte = a[id].unique_cards.size;
Object.keys(request).forEach(function(k) {
(a[id].request[k] = (a[id].request[k] || 0) + request[k])
});
Object.keys(res).forEach(function(k) {
(a[id].res[k] = (a[id].res[k] || 0) + res[k])
});
return a;
}, Object.create(null))
);
推荐阅读
- mysql - 如何使用 laravel 从存储在数组中的单列中获取数据?
- java - 如何根据列表大小将数据存储到另一个ArrayList中?
- java - 是否允许使用计时器隐藏/取消隐藏 Admob 广告?
- javascript - 如何找出一个数组是否有n个相等的数字?
- python - 尝试通过电报机器人发送消息时出现语法错误
- reactjs - 如何使用yield放在yield all中
- google-chrome-extension - 如何在 Chrome 扩展程序 browser_action 中登录 Google?
- node.js - 根据点击次数列出用户 Firebase
- ghostscript - Ghostscript:将 CMYK 颜色转换为具有特定名称的纯色
- laravel - 为什么从ckeditor到html页面的内容不一样?