javascript - .map() 将不需要的未定义值存储到新数组中
问题描述
简单的数组声明:
let sodas = ["Sprite", "Coke", "Mountain Dew", "Dr. Pepper", "Sunkist"];
我想使用.map()
函数创建一个包含仅由可口可乐公司拥有的苏打水的新数组,然后在控制台中显示这个新数组 -
let cocacola_sodas = sodas.map(soda => {
if ((soda == "Coke") || (soda == "Sprite")) {
return soda;
}
})
console.log(cocacola_sodas);
这段代码似乎有效,但我不确定为什么cocacola_sodas
当只返回 2 个新元素(可乐和雪碧)时它会将 5 个新元素返回到数组中。数组将显示["Sprite", "Coke", undefined, undefined, undefined]
。为什么它返回未定义的值?
解决方案
@awoldt,为了帮助您了解实际发生的情况,Array.prototype.map
将始终将相同数量的元素从输入数组返回到新数组。
所以最好的考虑方法是给 map 一个包含 x 个元素的数组,不管你对传递给 map 的块内的那些元素做了什么,它总是会返回新数组中的 X # 个元素。
正如所建议的那样,像 filter/reduce 这样的东西将返回一个新数组,其中仅包含满足您在他块中设置的标准的元素传递给这些助手
您可以在 MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map阅读更多关于 map 和所有 Array.prototype.methods 的信息
推荐阅读
- python - 使用 Tkinker 的多帧
- javascript - Vue - 创建钩子中的错误:“TypeError:无法读取未定义的属性'then'”
- python - 从另一个数据帧中获取关于索引的数据
- javascript - 如何检测 js 脚本中的特定页面,以便我可以从函数返回?
- nginx - 全页缓存(FastCGI)+ CSRF 令牌(服务器端加载 SSI、ESI、Ajax)+ Nginx
- django - 如何将组权限分配给 Django 中的单个记录
- android - 有没有办法从firebaseauth获取名字和姓氏?
- list - 如何在lisp中对列表进行排序?
- kubernetes - 如何对 kubeadm 上的 metrics-server 进行故障排除?
- objective-c - 在 macOS 10.14 中使用 clang 编译 Objective-C?