#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; }