используйте альтернативу для flatmap в javascript

#javascript

Вопрос:

Нужен альтернативный способ для flatmap в javascript более низкой версии es5 для приведенного ниже сопоставления.

 const b = [{
  "errorname": [{
    "name": "Error 01",
    "desc_1": "Test: 01",
    "desc_2": "Testing"
  }, {
    "name": "Error 03",
    "desc_1": "Test: 03",
    "desc_2": "Testing"
  }],
}, {
  "errorname": [{
    "name": "Error 02",
    "desc_1": "Test: 02",
    "desc_2": "Testing"
  }, {
    "name": "Error 09",
    "desc_1": "Test: 09",
    "desc_2": "Testing"
  } ]
}];

var errorMap = new Map(b
  .flatMap(o => o.errorname)
  .map(({
    name,
    ...e
  }) => [name, e]));



console.log(errorMap) 
 .as-console-wrapper {
  max-height: 100% !important;
  top: 0;
} 

пытаюсь выполнить es5 с аналогичной операцией. Доступ к приложению осуществляется с помощью приложения electron, которое не поддерживает es9

Комментарии:

1. Вы используете Map функцию со стрелкой и деструкцию в дополнение к .flatMap() . Почему проблема только в последнем?

2. Почему бы не использовать полифилл?

3. Вы можете найти заполнители для всех методов массива здесь

4. Спасибо за предложение. работы по заполнению полимеров

Ответ №1:

Вы можете скачать полифилл или реализовать свой собственный. Это должно быть так

 Array.prototype.flatMap = function(mapper) {
  var result = [];

  for (var i = 0; i < this.length;   i) {
    var item = mapper(this[i], i, this);

    if (!Array.isArray(item)) {
      item = [item];
    }

    for (var j = 0; j < item.length;   j) {
      result.push(item[j]);
    }
  }

  return resu<
}
 

Тогда вы сможете звонить myArray.flatMap , как обычно.

Комментарии:

1. Спасибо за предложение.. я добавил polyfill, и это работает

Ответ №2:

Вы можете выполнить внутреннее и внешнее сокращение, вложив вызовы. Это будет работать для версии ECMAScript под 5/6.

 const b = [{
  "errorname": [
    { "name": "Error 01", "desc_1": "Test: 01", "desc_2": "Testing" },
    { "name": "Error 03", "desc_1": "Test: 03", "desc_2": "Testing" }],
}, {
  "errorname": [
    { "name": "Error 02", "desc_1": "Test: 02", "desc_2": "Testing" },
    { "name": "Error 09", "desc_1": "Test: 09", "desc_2": "Testing" }
  ]
}];

var errorMap = b.reduce(function(outer, group) {
  return group.errorname.reduce(function(inner, item) {
    return inner.set(item.name, {
      desc_1: item.desc_1,
      desc_2: item.desc_2
    });
  }, outer);
}, new Map);

console.log(Object.fromEntries([...errorMap])); 
 .as-console-wrapper { max-height: 100% !important; top: 0; }