java怎么创建一个数组
怎么形容一个人很无聊?他每天都在数自己的呼吸次数。 #生活乐趣# #日常生活趣事# #轻松幽默的生活方式# #日常笑话库#
我正在寻找以下所有替代方案,以创建一个包含1到N的JavaScript数组,其中N仅在运行时才知道。
var foo = [];
for (var i = 1; i <= N; i++) {
foo.push(i);
}
在我看来,应该有一种没有循环的方法。
#1楼
如果您碰巧像我一样在您的应用程序中使用d3.js ,D3提供了一个帮助程序功能来帮助您执行此操作。
因此,要获得一个从0到4的数组,就像这样简单:
d3.range(5)
[0, 1, 2, 3, 4]
并按照您的要求从1到5获得一个数组:
d3.range(1, 5+1)
[1, 2, 3, 4, 5]
查看本教程以获取更多信息。
#2楼
这可能是生成数字数组的最快方法
最短的
var a=[],b=N;while(b--)a[b]=b+1;
排队
var arr=(function(a,b){while(a--)b[a]=a;return b})(10,[]);
//arr=[0,1,2,3,4,5,6,7,8,9]
如果要从1开始
var arr=(function(a,b){while(a--)b[a]=a+1;return b})(10,[]);
//arr=[1,2,3,4,5,6,7,8,9,10]
需要功能吗?
function range(a,b,c){c=[];while(a--)c[a]=a+b;return c}; //length,start,placeholder
var arr=range(10,5);
//arr=[5,6,7,8,9,10,11,12,13,14]
为什么?
while是最快的循环
直接设置比push更快
[]比new Array(10)快
简短...看第一个代码。 然后在这里查看所有其他功能。
如果你喜欢生活中不可缺少的
for(var a=[],b=7;b>0;a[--b]=b+1); //a=[1,2,3,4,5,6,7]
要么
for(var a=[],b=7;b--;a[b]=b+1); //a=[1,2,3,4,5,6,7]
#3楼
以下函数返回一个由数字填充的数组:
var createArrayOfNumbers = function (n) {
return Array.apply(null, new Array(n)).map(function (empty, index) {
return index;
});
};
请注意,使用数组构造函数创建的数组包含孔,因此无法使用诸如map之类的数组函数遍历该数组。 因此,使用Array.apply函数。
#4楼
您可以这样做:
var N = 10;
Array.apply(null, {length: N}).map(Number.call, Number)
结果:[0、1、2、3、4、5、6、7、8、9]
或具有随机值:
Array.apply(null, {length: N}).map(Function.call, Math.random)
结果:[0.7082694901619107、0.9572225909214467、0.8586748542729765、0.8653848143294454、0.008339877473190427、0.9911756622605026、0.8133423360995948、0.8377588465809822、0.5577575915958732、0.16363654541783035]
说明
首先,请注意Number.call(undefined, N)等同于Number(N) ,后者仅返回N 稍后我们将使用该事实。
Array.apply(null, [undefined, undefined, undefined])等同于Array(undefined, undefined, undefined) ,后者产生一个三元素数组,并将undefined分配给每个元素。
您如何将其概括为N个元素? 考虑一下Array()工作方式,它是这样的:
function Array() {
if ( arguments.length == 1 &&
'number' === typeof arguments[0] &&
arguments[0] >= 0 && arguments &&
arguments[0] < 1 << 32 ) {
return [ … ]; // array of length arguments[0], generated by native code
}
var a = [];
for (var i = 0; i < arguments.length; i++) {
a.push(arguments[i]);
}
return a;
}
从ECMAScript 5开始 , Function.prototype.apply(thisArg, argsArray)也接受鸭子类型的类似数组的对象作为其第二个参数。 如果我们调用Array.apply(null, { length: N }) ,它将执行
function Array() {
var a = [];
for (var i = 0; i < /* arguments.length = */ N; i++) {
a.push(/* arguments[i] = */ undefined);
}
return a;
}
现在我们有了一个N元素数组,每个元素都设置为undefined 。 当我们在其上调用.map(callback, thisArg)时,每个元素都将设置为callback.call(thisArg, element, index, array) 。 因此, [undefined, undefined, …, undefined].map(Number.call, Number)会将每个元素映射到(Number.call).call(Number, undefined, index, array) ,与Number.call(undefined, index, array)相同Number.call(undefined, index, array) ,如前所述,其计算结果为index 。 这样就完成了其元素与其索引相同的数组。
为什么要麻烦Array.apply(null, {length: N})而不是Array(N) ? 毕竟,这两个表达式都将导致一个由N个元素组成的未定义元素数组。 区别在于,在前一个表达式中,每个元素都显式设置为undefined,而在后一个表达式中,从未设置每个元素。 根据.map()的文档:
仅对具有指定值的数组索引调用callback ; 对于已删除或从未分配值的索引,不会调用它。
因此, Array(N)不够; Array(N).map(Number.call, Number)将导致长度为N的未初始化数组。
兼容性
由于此技术依赖于ECMAScript 5中指定的Function.prototype.apply()行为,因此在ECMAScript 5之前的浏览器(例如Chrome 14和Internet Explorer 9)中将无法使用 。
#5楼
您可以使用此:
new Array(/*any number which you want*/)
.join().split(',')
.map(function(item, index){ return ++index;})
例如
new Array(10)
.join().split(',')
.map(function(item, index){ return ++index;})
将创建以下数组:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
网址:java怎么创建一个数组 https://www.yuejiaxmz.com/news/view/414211
相关内容
Java中String str = new String(“abc”);创建了几个对象?经典String str = new String(“abc”)创建了几个对象?(转)
【Java数据结构】字符串常量池
Java程序员不得不会的124道面试题(含答案)
JAVA常用工具
JAVA题目
Java 在生活中的 10 大应用
Java技能提升指南
dentity在Java里是什么意思
《 Thinking in Java 》第五章 初始化与清理