【发布时间】:2011-01-03 22:11:24
【问题描述】:
有没有办法在javascript中为数组分配默认值?
例如:an array with 24 slots that defaults to 0
【问题讨论】:
标签: javascript arrays
有没有办法在javascript中为数组分配默认值?
例如:an array with 24 slots that defaults to 0
【问题讨论】:
标签: javascript arrays
您可以在数组上使用fill 函数:
Array(24).fill(0)
注意:fill 仅在 ECMAScript 2015 中引入(别名“6”),因此截至 2017 年浏览器支持仍然非常有限(例如没有 Internet Explorer)。
【讨论】:
var a = Array.apply(null, Array(24)).map(function() { return 0 });
// or:
var a = Array.apply(null, Array(5)).map(Boolean).map(Number);
【讨论】:
Array.prototype.repeat= function(what, L){
while(L) this[--L]= what;
return this;
}
var A= [].repeat(0, 24);
警报(A)
【讨论】:
repeat = function(what, count, isFactory) { ... }; [].repeat(function() { return new myObject(); }, 10, true);
repeat,因为 ES6 将实现repeat 方法,这意味着您将覆盖默认行为,这是不鼓励的。不过很好的解决方案。
有点啰嗦,但很管用。
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 ];
【讨论】:
最好和最简单的解决方案是:
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 : ""})
现在如果你想改变数组中的一些当前值 你可以使用
[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]
【讨论】:
如果您使用“非常现代”的浏览器(查看compatibility table),您可以依赖fill:
var array = new Array(LENGTH);
array.fill(DEFAULT_VALUE);
由于多种原因,new Array() 的使用不受很多开发人员的欢迎;所以你可以这样做:
var array = [];
for(var i=0; i<LENGTH; ++i) array.push(DEFAULT_VALUE);
后者更兼容,正如您所见,两种解决方案都由两行代码表示。
【讨论】:
我个人使用:
function replicate (n, x) {
var xs = [];
for (var i = 0; i < n; ++i) {
xs.push (x);
}
return xs;
}
例子:
var hellos = replicate (100, "hello");
【讨论】:
如果您使用的是 ES6 及更高版本,则可以使用
new Array(24).fill(0);
这也有效:
Array.from({ length: 24}, () => 0)
【讨论】:
没有。
你必须使用循环。
var a = new Array(24);
for (var i = a.length-1; i >= 0; -- i) a[i] = 0;
【讨论】:
现在,更聪明:)
@见JavaScript Array reference
Example on JSFiddle
var len = 100;
var ch = '0';
alert ( new Array(len).join( ch ) );
【讨论】:
Array(24).join().split('').map(function(){return 0})
实现相同的另一种方法 -
Array.from(Array(24),()=>5)
Array.from 接受第二个参数作为其映射函数。
【讨论】:
使用Lodash (https://lodash.com/docs),这是一个强大的数组操作库,也可用于浏览器。
var _ = require('lodash');
var A = _.fill(Array(24), 0);
【讨论】:
[].fill.call({ length: 24 }, 0);
【讨论】:
最简单的一个:
myArray = new Array(24).fill(0)
【讨论】:
我在下面使用的语法是基于 ECMA Script 6/es6
让 arr=[];
arr.length=5; //数组的大小;
[...arr].map(Boolean).map(Number); //三点运算符称为 spread Operator 在 ECMA Script 6 中引入
------------另一种方式-------------
让 variable_name=new Array(size).fill(initial_value)
比如 arr=new Array(5).fill(0) //es6中也引入了fill方法
根据 ECMA 5 或 es5
的另一种方式
var variable_name=Array.apply(null,Array(size)).map(Boolean).map(Number)
var arr=Array.apply(null,Array(5)).map(Boolean).map(Number);
所有这些都会给你相同的结果: [0,0,0,0,0]
【讨论】:
(new Array(5).toString().replace(/,/g, "0,") + "0").split(",")
// ["0", "0", "0", "0", "0"]
【讨论】:
var a = new Array(6).join(0).split('') 时,为什么要使用正则表达式替换?
如果您想要 BigO(1) 而不是 BigO(n),请查看以下解决方案:
数组的默认值为undefined。所以如果你想设置默认为0,你必须循环数组的所有元素将它们设置为0。
如果你必须这样做,没关系。但是我认为如果您在想要获取元素的值时检查该值会更好。
定义一个函数'get':获取数组的值。 myArray[index],如果 myArray[index] 未定义,则返回 '0',否则返回值。
const get = (arr, index) => {
return arr[index] === undefined ? 0 : arr[index];
}
用途:
const myArray = ['a', 'b', 1, 4];
get(myArray, 2); // --> 'b'
get(myArray, 102344); // --> 0;
【讨论】:
function get (i) { return 0; }