JS 离谱到给离谱它妈开门之二维数组创建

简介: 每日笑话之用 JS 创建二维数组,今天做一道 leetcode 题,想着需要创建一个二维数组,赋值初始化为 0,用 C、C++ 和 Java 的家人们可能疑惑了,这有什么?不就一行代码的事?

JS 离谱到给离谱它妈开门之二维数组创建

今天做一道 leetcode 题,想着需要创建一个二维数组,赋值初始化为 0,用 C、C++ 和 Java 的家人们可能疑惑了,这有什么?不就一行代码的事?

大家可以当个笑话看

就这?

int[][] arr = new int[n][n];

用 js 创建的我想着搞个花活?我得用一些奇奇怪怪的 API,不然用两个 for 循环不显得我太菜了?于是下面这篇代码出现了

let memory = new Array(n + 1).fill(0);
let temp = memory.concat();
memory.fill(temp);

concat() 返回的是新数组没问题吧,我填充的可是拷贝的数组,不是自己套自己喔

又是一个小细节

后面我就没在管这个二维数组了,去刷 leetcode 了,我刷的那条题也是牛逼,我写完代码逻辑后,我觉得没问题呀,我就把示例填了进去,结果过了,我信心倍增

就这

然后我去提交,结果发现第三个就测试用例就错了???

什么鬼?

woc,不可能!我那么精妙绝伦的解法怎么可能会出错??于是我反反复复的看我的解法好几遍,全然没有去看我创建的二维数组,最后无奈我把代码从网页上拉下来,准备本地调试,一开始调试的时候我都还没有注意到二维数组的问题,后面想看看二维数组的复制情况,好家伙,可算被我发现了,代码如下

// 查看复制情况
memory[start][end] = res;

好家伙,竟然是,一整列都赋值了??

img2.png
我大意了

后来我再仔细一想,js 数组它存的是地址喔,你 fill 不就是把地址给存进去了吗?我上面的代码的赋值其实都是给 fill() 参数中对应的那个数组的赋值

总结

其实这个问题主要还是我太菜了,没有注意到这个问题,不能怪 JS,C++,java 人家也是存的地址,同样的代码,也是同样的结果,只能说是自己没有严格的规范编写代码,忽略了本质

PS:其实上面那个已经是 v2 版本了,有个 v1 版本更是让我震惊

let memory = new Array(n).fill(0);
memory.fill(memory);
相关文章
|
11月前
|
JavaScript 前端开发 定位技术
js对二维数组的精确和模糊筛选并输出的封装函数
js对二维数组的精确和模糊筛选并输出的封装函数
85 0
|
9月前
|
JavaScript
js数组去重:二维数组去重、去除相同的值、移除相同的数组
js数组去重:二维数组去重、去除相同的值、移除相同的数组
|
机器学习/深度学习 JavaScript
js一维数组转二维数组
js一维数组转二维数组
js一维数组转二维数组
|
JavaScript 前端开发
从JavaScript二维数组排序说开去(2)
从JavaScript二维数组排序说开去(2)
1779 1
|
JavaScript 前端开发
从JavaScript二维数组排序说开去(1)
从JavaScript二维数组排序说开去(1)
121 1
|
前端开发 JavaScript 索引
JS将二维数组转成一维数组的方法有哪些?
前言 这是一道常见的前端面试题,也是考验JavaScript基础知识是否牢固的常见题型。在前端开发中后端可能会返回给我们一些奇怪的数据,比如说数组里面的元素也是数组,但是我们需要的是一个简单的一维数组,这个时候就需要将二维数组(或者多维数组)转化为我们需要的一维数组。也可以叫做数组扁平化。
1376 1
JS将二维数组转成一维数组的方法有哪些?
|
JavaScript 前端开发
JavaScript题解剑指offer : 04. 二维数组中的查找
JavaScript题解剑指offer : 04. 二维数组中的查找
99 0
|
JavaScript 前端开发
如何在 JavaScript 中操作二维数组
二维数组在 JavaScript 开发中是比较常见的数据结构,在本文将介绍如何使用 JavaScript 创建二维数组并对其进行操作,在JavaScript中常见的数组操作方法大概 10 个左右,可以参阅《JavaScript 数组操作必须熟练运用的10个方法》。
482 0
如何在 JavaScript 中操作二维数组
|
JavaScript
剑指Offer——二维数组中的查找(JS实现)
剑指Offer——二维数组中的查找(JS实现)
154 0
剑指Offer——二维数组中的查找(JS实现)