Javascript 默认数组值
有没有一种方法可以为javascript中的数组指定默认值 例如:Javascript 默认数组值,javascript,arrays,Javascript,Arrays,有没有一种方法可以为javascript中的数组指定默认值 例如:具有24个插槽的阵列,默认为0否 你必须使用循环 var a = new Array(24); for (var i = a.length-1; i >= 0; -- i) a[i] = 0; 有点罗嗦,但它是有效的 var aray = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
具有24个插槽的阵列,默认为0
否
你必须使用循环
var a = new Array(24);
for (var i = a.length-1; i >= 0; -- i) a[i] = 0;
有点罗嗦,但它是有效的
var aray = [ 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0 ];
var A=[]重复(0,24)强>
警报(A)我个人使用:
function replicate (n, x) {
var xs = [];
for (var i = 0; i < n; ++i) {
xs.push (x);
}
return xs;
}
现在,更聪明地说:)@见
如果您使用“非常现代”的浏览器(请检查),您可以依靠
fill
:
var array = new Array(LENGTH);
array.fill(DEFAULT_VALUE);
由于几个原因,许多开发人员不喜欢使用newarray()
;因此,您可以按以下步骤执行相同的操作:
var array = [];
for(var i=0; i<LENGTH; ++i) array.push(DEFAULT_VALUE);
var数组=[];
对于(var i=0;i使用Lodash
(),这是一个用于数组操作的健壮库,也可用于浏览器
var _ = require('lodash');
var A = _.fill(Array(24), 0);
您可以在阵列上使用fill
功能:
Array(24).fill(0)
注:fill
仅在ECMAScript 2015(别名“6”)中引入,因此截至2017年,浏览器支持仍然非常有限(例如没有Internet Explorer)。最简单的一个:
myArray = new Array(24).fill(0)
如果您使用的是ES6及以上版本,则可以使用
new Array(24).fill(0);
[the created array ].fill(a new value , start position, end position(not included) )
这也适用于:
Array.from({ length: 24}, () => 0)
下面我使用的语法基于ECMA脚本6/es6
设arr=[]
arr.length=5;//数组的大小
[…arr].map(布尔).map(数字);//三点运算符在ECMA脚本6中称为扩展运算符
------------另一种方式-------------
让变量名称=新数组(大小)。填充(初始值)
对于ex-let arr=new Array(5).fill(0)//在es6中也引入了fill方法
另一种方式符合ECMA 5或es5
var variable_name=Array.apply(null,数组(大小)).map(布尔值)。map(数字)
var arr=Array.apply(null,数组(5)).map(布尔值).map(数字)
所有这些都将为您提供相同的结果:
[0,0,0,0,0]实现同样目标的另一种方法-
Array.from(数组(24),()=>5)
Array.from
接受第二个参数作为其映射函数。最佳且最简单的解决方案是:
Array(length of the array).fill(a default value you want to put in the array)
范例
Array(5).fill(1)
结果将是
[1,1,1,1,1]
你可以在里面放任何你喜欢的东西:
Array(5).fill({name : ""})
现在,如果要更改数组中的某些当前值
你可以用
new Array(24).fill(0);
[the created array ].fill(a new value , start position, end position(not included) )
像
输出是
[1, "a", "a", 1, 1]
奇怪的(Javascript方面的)命名约定是怎么回事?(@大写字母的使用。)假设我想这样做,但是有一个对象数组,我该怎么做呢?var A=[]。repeat(new myObject(),10)只是复制引用,而不是每次实例化一个新对象time@Mortenrepeat=function(what,count,isFactory){…};[].repeat(函数(){return new myObject();},10,true)
这已经很晚了,但我只想给以后阅读这篇文章的人补充一点:不要叫它repeat
,因为ES6将实现一个repeat
方法,这意味着您将覆盖默认行为,这是不鼓励的。不过,好的解决方案。deadrunk下面的答案更好,它不会改变阵列原型,但不会改变同样的事情。从技术上讲,它仍然是一个循环,移动到一个函数中。@KnickerKicker-不,对于一个一次性的24元素数组,我可能会完全这样做。如果它是大量的项或者我反复需要它,那么我会更聪明。实际上,这并不能回答问题“有没有一种方法可以为javascript中的数组指定默认值?“这个答案解决的是一个澄清的例子。到目前为止,这是创建一个包含24个零的数组的最有效、最干净的方法。我不知道为什么会有这样的结果。他要求的是一个包含0的数组,而不是0的字符串版本。加上这段代码编写得很糟糕,为什么要在可以执行var a=new array(6)的情况下使用正则表达式替换呢。join(0).split(“”)
?函数get(i){return 0;}
我的解决方案的Big-O是O(1)另一种方式总是有O(n)这里有一个版本可以根据问题中的要求给出数字:数组(24).join().split(“”).map(函数(){return 0})
如何在第一个数组上允许map?有关构造数组的方式的一些信息允许map工作,而通常情况下它会退出。
Array(5).fill(1)
[1,1,1,1,1]
Array(5).fill({name : ""})
[the created array ].fill(a new value , start position, end position(not included) )
[1,1,1,1,1].fill("a",1,3)
[1, "a", "a", 1, 1]