Не понятно поведения метода Array.map() в class
всем...
Есть такой class у меня.
Не могу сообразить с чего вдруг в методе getName данного класса странно ведет себя метод Array.map()
Чтобы увидеть данную проблему, раскомментируйте нижнюю строку и закомментируйте верхнюю.
Разница в них, только в {} фигурных скобках.
А вот в getData() такой проблемы не наблюдается...
//const arrayHtml = fs.readdirSync(path.resolve(__dirname, templateDir));
const arrayHtml = ['index.html', 'dash.html', 'zoo.html'];
class DataSiteConfig {
constructor(folder, favicon) {
this.name = name;
this.favicon = favicon;
this.folder = folder;
this.pageList = [];
}
getName(dirNameFiles) {
this.name = dirNameFiles.map((s, i, arr) => s.slice(0, -5));
//this.name = dirNameFiles.map((s, i, arr) => {s.slice(0, -5)});
}
getData() {
this.name.map((s, i, arr) => {
this.pageList.push({
title: s,
template: `frontend/html/${s}.html`,
filename: `pages/${s}.html`
})
})
}
}
let dataSiteConfig = new DataSiteConfig('Zona', 'Chtoto.png');
dataSiteConfig.getName(arrayHtml);
dataSiteConfig.getData();
console.log("TCL: dataSiteConfig", dataSiteConfig);
Кто подскажут, почему так...
Ответы (1 шт):
Вы немного ошиблись с синтаксисом. Тело стрелочной функции может иметь краткую (concise body) или блочную (block body) форму. Этот вариант:
this.name = dirNameFiles.map((s, i, arr) => s.slice(0, -5));
работает, потому что в стрелочных функциях мы можем не писать скобки, если нужно вернуть что-то, что пишется в одну строку. Это аналогично записи:
this.name = dirNameFiles.map((s, i, arr) => {
return s.slice(0, -5);
});
Если написать скобки и не указать return, то возвращаться будет undefined, в полной форме записи это выглядит примерно так:
this.name = dirNameFiles.map((s, i, arr) => {
s.slice(0, -5);
});
из-за этого каждый элемент массива будет undefined.
Код в getData() работает исправно, потому что там ничего не возвращается, а просто проходится цикл. Там вообще нет особого смысла использовать map(), потому что map() возвращает измененный массив, а в getData() идет обычный проход по всему массиву.