[afterCode] JavaScript 中如何快捷的创建一个含有相同初始值的数组

news/2025/2/12 19:34:10

目标

function createArrayWith(length,value){...}createArrayWith(2,3) => [3, 3]
createArrayWith(2,{test:2}) => [{test:2}, {test:2}]

条件: 尽量的简洁

首先想到的是map

function createArrayWith(length,value){return new Array(length).map(function(){return value})
}

失败

createArrayWith(2,3) 
[ , ]

原因

map calls a provided callback function once for each element in an array, in order, and constructs a new array from the results. callback is invoked only for indexes of the array which have assigned values, including undefined. It is not called for missing elements of the array (that is, indexes that have never been set, which have been deleted or which have never been assigned a value).

from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

原来数组中的"空"元素,map(包括foreEach)都是不会去遍历处理的. 而只传一个参数new出来数组,每个元素都是空的

死磕map

观察Array 构造函数的接口

new Array(element0, element1[, ...[, elementN]])
new Array(arrayLength)

可以用不定参数的方式来创建

用apply试试

function createArrayWith(length,value){return Array.apply(null,new Array(length)).map(function(){return value})
}// 可行
createArrayWith(2,3)
[ 3, 3 ]

使用ES6的语法简化下

function createArrayWith(length,value){return Array.apply(null,new Array(length)).map(()=>value)
}createArrayWith(2,3)
[ 3, 3 ]

好像new也可以去掉

function createArrayWith(length,value){return Array.apply(null,Array(length)).map(()=>value)
}createArrayWith(2,3)
[ 3, 3 ]

到了这一步好像是最简洁的实现方式了,但是看起来是在太怪异了.

ES6到底

在MDN 过Array 方法的时候,发现了居然有这个一个函数

arr.fill(value[, start = 0[, end = this.length]])

顿时草泥马奔腾,原来ES6添加了这个新函数.

在ES6的环境下的话,最简洁的方式还是

function createArrayWith(length,value){return new Array(length).fill(value)
}createArrayWith(2,3)
[ 3, 3 ]

折腾完毕


https://dhexx.cn/news/show-3628460.html

相关文章

解决使用jQuery采用append添加的元素事件无效的方法

解决使用jQuery采用append添加的元素事件无效的方法参考文章: (1)解决使用jQuery采用append添加的元素事件无效的方法 (2)https://www.cnblogs.com/Joburgess/p/4213070.html 备忘一下。

MFCc窗口背景贴图

一、要修改窗口的背景,步骤如下:1、导入一个位图文件。2、创建一个View窗体的删除背景时的相应函数BOOL CWndMapView::OnEraseBkgnd(CDC* pDC)或者在view类的OnDraw响应函数void CWndMapView::OnDraw(CDC* pDC)这两个函数的区别是,一个在擦除…

几个典型场景的系统设计解决方案

一、分布式系统的GFS、MapReduce和Bigtable (1)GFS一致性模型 GFS一致性模型是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。 它运行于廉价的普通硬件上,提供容错功能。现在开源界有HDFS(Hadoop …

Mybatis/MybatisPlus面试题

文章目录1.MyBatis是什么?2.ORM是什么3.为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?4.传统JDBC开发存在的问题5.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?6.Hibernate 和 MyBatis 的区别…

silverlight调用远程地址出错

尝试向 URI“http://localhost:2859/Service.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 HTTP 标…

MySQL应用的异常记录

Error Code: 1045. Access denied for user test% (using password: YES) 使用MySQL的select * into outfile ‘/tmp/rs.txt’ from tb_name来导出结果时遇到这个问题, 当前用户虽然拥有全部权限,但是file权限需要单独赋予,使用root用户执行&…

windows mysql提示:1045 access denied for user ‘root‘@‘localhost‘ using password yes 解决方案

windows mysql提示:1045 access denied for user rootlocalhost using password yes 解决方案参考文章: (1)windows mysql提示:1045 access denied for user rootlocalhost using password yes 解决方案 &#xff08…

xp“开始”菜单“所有程序”无法弹出右键解决办法

“开始”-“属性”-“自定义”-”高级“下禁用了”启用拖放“造成的转载于:https://www.cnblogs.com/RichardLee/archive/2012/04/06/2434434.html

关于mybatis的xml文件中使用 >= 或者 <= 号报错的解决方案

关于mybatis的xml文件中使用 > 或者 < 号报错的解决方案参考文章&#xff1a; &#xff08;1&#xff09;关于mybatis的xml文件中使用 > 或者 < 号报错的解决方案 &#xff08;2&#xff09;https://www.cnblogs.com/zibujinghan/p/9936208.html 备忘一下。

C#中引用类型几个小例子

1.传递引用到方法中&#xff0c;会复制一个新的引用地址 private void aa(Data data3) { data3 null;} Data data new Data(); data.name "123"; Data data2 data; aa(data); MessageBox.Show(data.name "," data2.name); 结果&#xff0c;123&#…