javascript - 为什么这段代码会返回一个未定义值的数组以及其他值?
问题描述
我正在映射一个数组并使用 switch 语句来 console.log 一些字符串。它记录所有字符串,但也记录一个数组:[undefined, undefined, undefined]
. 我不确定为什么它会记录未定义值的数组。是不是因为 map 返回了一个新的值数组,在这种情况下,我要从现有数组中删除值并将它们转换为字符串?
const arr = ['joe', 'paul', 'chris']
const statements = arr.map((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;
}
})
console.log(statements);
解决方案
.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);
推荐阅读
- sockets - 在 Windows 上使用来自 GNU Emacs 的 Emacs Lisp 打开 UDP / 数据报套接字
- html - 为什么我无法使用 xhtml 架构检测节点 Xpath 中的属性信息?
- python - Python中带有条件的列表的平均值
- python - 使用 DTW 对不规则时间序列数据进行下采样/上采样
- python - 编写用下划线替换 hypen 的编辑过的 xml
- c# - 如何在 C# SQL 查询中插入动态列名?
- python - 使用python将pdf下载到特定文件夹
- javascript - 为什么代码在我编写 myArray[i] 时有效,而不是在我将 myArray[i] 保存在变量中时有效?
- r - 是否有 R 函数来提取单个组均值?
- jekyll - jekyll - netlify 上带有 beautiful-jekyll 的主页链接错误。为了使用 netlify 构建生成正确的主页链接,我需要进行哪些更改?