.map
принимает массив и возвращает новый массив, состоящий из вызова функции обратного вызова для каждого элемента исходного массива. Ваша функция обратного вызова ничего не возвращает, поэтому массив statements
оценивается как [undefined, undefined, undefined]
.
.map
здесь не подходит, потому что вам не нужен сопоставленный массив. Вместо этого используйте forEach
и пропустите переменную statements
:
const arr = ['joe', 'paul', 'chris']
arr.forEach((name) => {
console.log(name + ' console!')
switch (name) {
case 'joe':
console.log(name + ' is cool!');
break;
case 'paul':
console.log(name + ' smells!');
break
case 'chris':
console.log(name + ' is cheap!')
break;
}
})
Вы могли бы также рассмотреть возможность полного отказа от switch
, поскольку это излишне многословно и может быть подвержено ошибкам - используйте вместо этого объект:
const arr = ['joe', 'paul', 'chris']
const nameStrs = {
joe: 'is cool',
paul: 'smells',
chris: 'is cheap'
};
arr.forEach((name) => {
console.log(`${name} ${nameStrs[name]}`);
})
Если вы действительно хотите создать массив ответов для каждого элемента в массиве, тогда используйте .map
и возвращайте значение в конце обратного вызова, в дополнение к записи значения:
const arr = ['joe', 'paul', 'chris'];
const nameStrs = {
joe: 'is cool',
paul: 'smells',
chris: 'is cheap'
};
const statements = arr.map((name) => {
const statement = `${name} ${nameStrs[name]}`;
console.log(statement);
return statement;
});
console.log(statements);