今天在创建一个二维数组时,遇到一个小坑,最后发现是对forEach函数的理解不够深刻导致的bug,特此记录说明。

需求如下:创建一个10 x 10的二维数组

最常规的想法是,进行遍历循环

let item = new Array(10);
for( let i  = 0 ; i < 10; i++ ){item[i] = new Array(10);
}

上面的代码完全可以实现这个需求,然而当时的我想着能不能不使用for循环,使用高级一点的forEach进行循环,结果就悲剧了

let item2 = new Array(10);
item2.forEach(function(val, index){item2[index] = new Array(10);
});

想法很丰满,结果很骨感。这个item2在控制台打印出来仍旧是一个一维数组,当我尝试在forEach的回调函数中加入console.log语句时,发现这个console语句根本没有执行!!!

无奈之下,老夫前往MDN查阅了这个forEach,这不查不知道啊,一查才发现自己的无知。
下面是MDN查阅的:

从描述中我们可以看到,已删除和未初始化的项会被跳过,这也就解释了为什么我们的回调函数没有执行。而且这里还发现一个新的知识点,那就是回调函数的函数体是可以进行this绑定的。

说到这个创建二维数组,让我不禁又想到了另外一种之前尝试的错误方法。

let item3 = new Array(10).fill( new Array(10) );

是否觉得很完美。然而这种做法会有一个很大的隐患,可以理解为通过fill为一维数组的每一项填充的都是同一个new Araay(10), 所以此时你改变任意一项,其他九项都会跟着一起改变,因为它们都是指向同一个引用。

说了这么多,兄得你学到了么。

js创建二维数组小坑相关推荐

  1. Python创建二维数组(关于list的一个小坑)

    0.目录 1.遇到的问题 2.创建二维数组的办法 3.1 直接创建法 3.2 列表生成式法 3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作 ...

  2. python 创建二维list,Python创建二维数组(关于list的一个小坑)

    遇到的问题 今天写Python代码的时候遇到了一个大坑,问题是这样的,我需要创建一个二维数组,如下: 输出结果如下: 是不是看起来没有一点问题? 一开始我也是这么觉得的,以为是我其他地方用错了什么函数 ...

  3. c语言动态生成二维数组,C语言 动态创建二维数组

    /*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include #include #include #define RANK 10 #define COLUMN ...

  4. python创建一个n*m的二维数组_Python中创建二维数组

    Python中创建二维数组 二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩 ...

  5. jupyter notebook多维数组运算_Python创建二维数组的正确姿势

    List (列表)是 Python 中最基本的数据结构.在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始.因此,我们可以使用 list[1] 来获取下标对应的值.如果我们深入下列表 ...

  6. C语言-动态创建二维数组

    文章目录 1 前言 2 动态创建的实现方法 2.1 方法1(适用于二级指针传递) 2.2 方法2(模拟C语言数组的储存方式) 1 前言 参照我之前的一篇文章 二维数组做函数的参数 文章中提到,当我们想 ...

  7. asp利用dictionary创建二维数组

    这是asp利用dictionary创建二维数组的例子,这样做的优点是: 1.数组下标可以是字符串 2.长度不是固定的 <% '================================== ...

  8. 【收藏】scala创建二维数组并赋值

    https://blog.csdn.net/weixin_46034893/article/details/114112163 scala 创建二维数组的方法跟 java 有一些区别,研究了好一会,终 ...

  9. python 二维数组 长度_Python创建二维数组的正确姿势

    ↑↑↑点击上方"蓝字",关注"极客猴" 如果你喜欢极客猴,可以把我置顶或加为星标 题图:by watercolor.illustrations from Ins ...

最新文章

  1. Python的基础,Python的101
  2. Android 浏览器 —— 使用 WebView 实现文件下载
  3. 文巾解题 567. 字符串的排列
  4. linux内核同步之信号量、顺序锁、RCU、完成量、关闭中断【转】
  5. C++虚函数实现多态的机制
  6. sql-逻辑循环while if
  7. [vue] 怎么在watch监听开始之后立即被调用?
  8. Centos7 重启网卡
  9. Java并发编程基础-ReentrantLock的机制
  10. 配置多台机器SSH相互通信信任
  11. P3150 pb的游戏(1)
  12. 用 js判断 一个数是否是素数(质数)_小学数学知识点1~6年级汇总整理,收藏起来随时用!(下)...
  13. 数据库 事务提交和回滚
  14. java多线程调度_Java多线程:生命周期,实现与调度
  15. 怎么用Excel公式计算百分比?教你三种计算方法
  16. 小米5测试机软件,小米手机硬件检测软件
  17. hive sql系列(七)——查询前20%时间的订单信息
  18. 淘宝运营 淘宝补流量的作用 如何安全补单
  19. 毛星云opencv--多通道图像混合官方源码
  20. 中国LINUX公社(论坛)

热门文章

  1. PHP修改图片上的文字,怎么用ps改图片上的字
  2. 有控制雷电武器的java游戏_雷电飞机射击游戏 JAVA
  3. 暑假学习计划:Day_1.JSPServletTomcat 环境搭建到基础的认识。
  4. 【转】Ogitor中Gizmo的绘制技巧 - 战魂小筑 - C++博客
  5. (C语言)字符串函数strcpy和strlen的实现,以及简单的文字编程题(派大星看了都会写)
  6. 超级产品:国内美妆行业正在发生什么变化?
  7. 关于手机话费充值的方法
  8. 新版本已经不需要了icudtl.dat文件
  9. adlds文件服务器,Windows Server 2008:AD LDS应用攻略
  10. gmail 过滤器_如何使用Gmail的高级搜索功能和创建过滤器