搜索

查看: 3642|回复: 11

[JavaScript] JS解决 Array.fill()参数为对象指向同一个引用地址的问题

[复制链接]
发表于 2023-5-4 11:47:26 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:47:26 3642 11 看全部
目录
  • JS解决 Array.fill()参数为对象指向同一个引用地址
  • 补充:JS中用Array.fill() 初始化 二维数组 避坑
    JS解决 Array.fill()参数为对象指向同一个引用地址
    最近写项目过程中总是想写出漂亮的代码,一行代码搞定绝不用两行,也是踩了fill这个坑了
    例如一个数组中想填充一些指定的数据
    Array(10).fill(1)
    那么结果就会出现[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 十对应的1个
    如果呢fill 这个方法接受的值是一个引用数据类型,那么他们会指向同一个地址。
    let arr = Array(5).fill({}).map(it=>({}))
    arr[0].a = 1
    输出结果:[{a:1}, {a:1}, {a:1}, {a:1}, {a:1}]
    解决方案:使用map返回出不同的引用的地址,fill参数可随意填写(不为空),主要是map函数中返回的数据。
    类型为数组:
    let arr = Array(5).fill([]).map(it=>[])
    类型为对象:
    Array(5).fill({}).map(it=>({}))
    注意:对象要用 小括号包裹 否则函数会以为是函数体,默认不写return 返回undefined 。

    补充:JS中用Array.fill() 初始化 二维数组 避坑
    现在有个需求,创建一个 m*n 的二维数组 先填充为false
    1.const P = new Array(3).fill(new Array(3).fill(false));

    /*
    [
        [false, false, false],
        [false, false, false],
        [false, false, false]
    ]
    */
    2.

    const P = new Array(3)

    const obj = {name: 'qqq'}

    P.fill(obj)

    /*
    [
        [false, false, false],
        [false, false, false],
        [false, false, false]
    ]
    */
    1和2当我改变一个值:
    P[0][0] = true;
    结果都是
    /*
    [
        [true, false, false],
        [true, false, false],
        [true, false, false]
    ]
    */
    坑点:
    如果value值为一个引用数据类型,则fill之后,数组里面的值指向的是同一个地址。如果改变了其中一个,则其它的都会改变。
    解决:
    1.利用双重for循环创建二维数组
    for(var i = 0; i
    2.先用空数组填充,然后再 map 遍历空数组,添加元素。
    const P = new Array(3).fill([]).map(() => new Array(3).fill(false));
    到此这篇关于JS解决 Array.fill()参数为对象指向同一个引用地址的文章就介绍到这了,更多相关js  Array.fill()参数为对象指向同一个引用地址内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛!
  • 发表于 2023-6-28 19:24:43 | 显示全部楼层
    掌舵的鱼1987 2023-6-28 19:24:43 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    发表于 2023-6-29 00:51:13 | 显示全部楼层
    哈哈SE7 2023-6-29 00:51:13 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
    发表于 2023-6-29 07:39:22 | 显示全部楼层
    Gordon520 2023-6-29 07:39:22 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-29 18:09:01 | 显示全部楼层
    123456823 2023-6-29 18:09:01 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-29 19:58:10 | 显示全部楼层
    风吹吹蛋蛋疼风w 2023-6-29 19:58:10 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    发表于 2023-6-29 21:39:24 | 显示全部楼层
    当当当当裤裆坦 2023-6-29 21:39:24 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    发表于 2023-6-29 22:59:39 | 显示全部楼层
    123456848 2023-6-29 22:59:39 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    发表于 2023-6-30 00:20:27 | 显示全部楼层
    123456825 2023-6-30 00:20:27 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-30 03:30:18 | 显示全部楼层
    小妖花满楼满fx 2023-6-30 03:30:18 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表