美文网首页
Array.fill() 填充引用类型时的问题

Array.fill() 填充引用类型时的问题

作者: Patriot_笙箫 | 来源:发表于2019-08-02 10:53 被阅读0次

项目中用到了二维数组, 遇到了一些问题, 记录一下:

  1. 使用Array(10)创建的数组是一个只有长度的数组, 数组中是empty, 不可循环遍历

想要遍历就需要数组中包含可遍历元素
于是填充数组用到了Array(10).fill(undefined)方法 fill文档
得到一个长度为10, 且每个元素都是undefined的数组

  1. fill() 方法进行填充时, 如果传入引用类型, 则数组中所有元素指向 同一个对象
const arr1= [1, 2]
const arr = new Array(2).fill(arr1)
arr[0][0] = 0
console.log(arr) 
// 预期 [[0, 2], [1, 2]]
// 实际 [[0, 2], [0, 2]]

这样在我们操作二维数组的值的时候数据就会混乱
当我们想创建一个指定的二维数组时可以这么写
new Array.fill(undefined).map(()=> new Array(10).fill(undefined) )

上面代码利用map循环、返回新数组的特性创建了一个10*10的二维数组, 保证内部数组内存指向干净
没有深究更简单的方法, 如有请告知, 谢谢

相关文章

  • Array.fill() 填充引用类型时的问题

    项目中用到了二维数组, 遇到了一些问题, 记录一下: 使用Array(10)创建的数组是一个只有长度的数组, 数组...

  • 数组里填充对象

    当我们需要在数组中填充数据的时候 一般会想到什么方法??没错 是Array.fill()可是当我们用这个方法去填充...

  • C++学习:Effective Modern C++条款

    条款1:理解模板类型推导 推导模版类型时,引用的值视为非引用,即忽略引用。 推导通用引用类型参数时,左值特殊处理。...

  • 初级问题

    1、Golang make和new的区别 makenew返回值返回对应的引用类型分配零值填充的T类型,并返回指针 ...

  • JS中容易出错的点

    基本类型和引用类型的赋值问题 上例很好地证明了:基本类型值按值传递,引用类型值按引用传递 同名变量和方法覆盖问题 ...

  • Solidity编写智能合约笔记-引用类型

    Solidity是静态类型语言,编译时需明确变量的类型,变量类型包括有值类型与引用类型 引用类型(Referenc...

  • Swift 类class和结构体struct的区别

    类是引用类型,结构体是值类型。 值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个指向。引用类型是...

  • Swift中类和结构体的区别

    类是引用类型,结构体是值类型。 值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个指向。引用类型是...

  • Swift中class、struct的异同

    class是引用类型,struct是值类型。 值类型在传递和赋值时将进行复制,而引用类型仅使用引用对象的指针。 值...

  • class和struct的区别

    class是引用类型,引用类型则只会使用引用对象的一个"指向"struct是值类型,值类型在传递和赋值时将进行复制...

网友评论

      本文标题:Array.fill() 填充引用类型时的问题

      本文链接:https://www.haomeiwen.com/subject/niwkdctx.html