Array.prototype.fill()与填充不同

笨拙地

我正在研究将其结果输出到2D数组的问题,并随即在每个元素中添加一个。

尽可能简化了代码,以创建测试用例。如果我随即填充数组,则如下所示:

var a = [[], [], [] ,[] ,[], []];
var d1, d2;
for (d1 = 0; d1 < 6; d1++) {
    for (d2 = 0; d2 < 6; d2++) {
        a[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1; 
    }
}

我得到一个所有值均为1的2D数组。但是,如果我使用array.prototype.fill()预填充数组,如下所示:

var a = new Array(6).fill(new Array(6).fill(0));
var d1, d2;
for (d1 = 0; d1 < 6; d1++) {
    for (d2 = 0; d2 < 6; d2++) {
        a[d1][d2] += 1; 
    }
}

我得到一个充满6s的2D数组。即使我a[d1][d2] += 1用old替换a[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1;(由于0和undefined都是虚假的,它仍然可以工作),我仍然得到6s。

据我所知,我的代码应该只遍历每个元素,并将一个添加到先前的值。它不应多次触摸任何元素,因此它们都应为1。我是否提前填充数组都无关紧要。

我理解的失败在哪里?

哈姆斯

Array.fill用于将数组的所有元素(从开始索引到结束索引)填充为静态值。

不幸的是,这意味着如果您传入一个元素(例如新数组),则该数组实际上将充满对该同一个元素的许多引用。换句话说,a未填充大小为6的六个数组;a填充了六个指向大小相同的数组六个指针

您可以在开发者控制台中轻松地验证这一点:

var a = new Array(6).fill(new Array(6).fill(0));
a
>>> [Array[6], Array[6], Array[6], Array[6], Array[6], Array[6]]
a[0]
>>> [0, 0, 0, 0, 0, 0]
a[1]
>>> [0, 0, 0, 0, 0, 0]
a[0][1] = 1
a[0]
>>> [0, 1, 0, 0, 0, 0]
a[1]
>>> [0, 1, 0, 0, 0, 0]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

奇怪的Array.prototype.constructor.apply行为

来自分类Dev

Array.prototype.sort临时复制内容?

来自分类Dev

从Array.prototype方法返回array的值

来自分类Dev

Array.prototype无需修改原始数组

来自分类Dev

Array.prototype.forEach.call与Array.prototype.forEach有什么区别

来自分类Dev

Javascript:Array.prototype.find()的替代方法?

来自分类Dev

Array.length与Array.prototype.length

来自分类Dev

[] .slice与Array.prototype.slice

来自分类Dev

Array.prototype.map()和Array.prototype.forEach()

来自分类Dev

使用array.prototype.push与array.push

来自分类Dev

Array.prototype.fill参考类型的预期行为

来自分类Dev

带有对象的Array.prototype.fill()通过引用而不是新实例

来自分类Dev

Array.prototype.slice.call()的内部工作

来自分类Dev

Array.prototype导致错误

来自分类Dev

JavaScript-为什么在填充“ new Object()”之类的内容时,Array.prototype.fill实际上填充对象的“指针”

来自分类Dev

扩展Array.prototype崩溃

来自分类Dev

在ngIf中使用array.prototype.some

来自分类Dev

为什么Array.prototype.sort在Chrome中有不同的行为?

来自分类Dev

调用Array.prototype.slice.apply(arguments)时结果不同

来自分类Dev

Array.prototype.map()无法正常工作

来自分类Dev

Array.prototype.filter()在对象数组上不起作用,因为引号不同

来自分类Dev

较旧的Internet Explorer中非数组的Array.prototype.slice填充程序

来自分类Dev

在Array.prototype中获取调用方

来自分类Dev

array.prototype.slice.call(X).concat(array.prototype.slice.call(X))的魔力

来自分类Dev

Array.prototype.forEach.call与Array.prototype.forEach有什么区别

来自分类Dev

Array.prototype.concat()在后台

来自分类Dev

了解Array.prototype.map

来自分类Dev

Array.prototype.map() 返回空项但 Array.prototype.forEach() 不返回

来自分类Dev

仅使用 Array.prototype.map() 和 Array.prototype.filter() 达到以下效果

Related 相关文章

  1. 1

    奇怪的Array.prototype.constructor.apply行为

  2. 2

    Array.prototype.sort临时复制内容?

  3. 3

    从Array.prototype方法返回array的值

  4. 4

    Array.prototype无需修改原始数组

  5. 5

    Array.prototype.forEach.call与Array.prototype.forEach有什么区别

  6. 6

    Javascript:Array.prototype.find()的替代方法?

  7. 7

    Array.length与Array.prototype.length

  8. 8

    [] .slice与Array.prototype.slice

  9. 9

    Array.prototype.map()和Array.prototype.forEach()

  10. 10

    使用array.prototype.push与array.push

  11. 11

    Array.prototype.fill参考类型的预期行为

  12. 12

    带有对象的Array.prototype.fill()通过引用而不是新实例

  13. 13

    Array.prototype.slice.call()的内部工作

  14. 14

    Array.prototype导致错误

  15. 15

    JavaScript-为什么在填充“ new Object()”之类的内容时,Array.prototype.fill实际上填充对象的“指针”

  16. 16

    扩展Array.prototype崩溃

  17. 17

    在ngIf中使用array.prototype.some

  18. 18

    为什么Array.prototype.sort在Chrome中有不同的行为?

  19. 19

    调用Array.prototype.slice.apply(arguments)时结果不同

  20. 20

    Array.prototype.map()无法正常工作

  21. 21

    Array.prototype.filter()在对象数组上不起作用,因为引号不同

  22. 22

    较旧的Internet Explorer中非数组的Array.prototype.slice填充程序

  23. 23

    在Array.prototype中获取调用方

  24. 24

    array.prototype.slice.call(X).concat(array.prototype.slice.call(X))的魔力

  25. 25

    Array.prototype.forEach.call与Array.prototype.forEach有什么区别

  26. 26

    Array.prototype.concat()在后台

  27. 27

    了解Array.prototype.map

  28. 28

    Array.prototype.map() 返回空项但 Array.prototype.forEach() 不返回

  29. 29

    仅使用 Array.prototype.map() 和 Array.prototype.filter() 达到以下效果

热门标签

归档