проблема поддержки с деструктурирующими заданиями в es5 - PullRequest
0 голосов
/ 29 марта 2019

У меня была проблема с частью кода, которая использует назначения деструктурирования, которая не поддерживается в 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

1 Ответ

2 голосов
/ 29 марта 2019

Удалите уничтоженную строку и назначьте исходный объект переменной (o в примере).Затем вручную присвойте переменным необходимые свойства.

Как и @ Дели отметил , вам также следует заменить сокращенные имена свойств на ручное присвоение.

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))
);
...