我想知道是否可以创建一个数组并使用相同的对象初始化它,而不必在每个元素上循环。我不想循环,因为我可能必须插入许多元素。 这就是我希望能够做到的:
var array=new Array(10000);
我希望数组的每个元素都是同一个对象(除了undefined :) 无需这样做
for(i=0;i<array.length;i++)
array[i]=object;
我希望我想做的事情对你很清楚
我想出了一个解决方案,但是我使用了eval函数,所以我不确定它是否是最好的,但它比循环更有效
欢迎您的建议:)
这是如何
var i="l,",l=new Object(),length=20000;
l.id=1;
while(i.length<length){
i+=i;
}
i=i.substring(0,length-1);
i="["+i+"]";
var array=eval(i);
console.log(array);
感谢
答案 0 :(得分:3)
当您执行new Array(10000);
时,JS中的数组不需要为元素分配存储。您只是因为没有这样的元素而得到未定义的元素 - 甚至没有为它们分配存储空间。要创建数组的元素,您必须明确地放置它们。
但说实话,我不明白为什么你需要那个。这就足够了:
var v = array[i] || object;
如果未定义元素,v
将始终具有元素或对象。
答案 1 :(得分:1)
否和是@see array spec。
不,就像JS一样,没有像这样的构造函数:
var a = new Array(10000, someObject);
// or
var a = Array.fill(0, 10000, someObject);
是的,你可以手动完成:)
var a = new Array(someObject, someObject, someObject, ..., someObject); // 9996 elements ommited
在你的代码中,最好这样做:
for (var i = 0, iMax = array.length; i < iMax; i++) {
array[i]=object;
}
答案 2 :(得分:1)
js中没有这样的内置功能,但你可以为你创建一个;是的,我在函数myArray
内循环。
function myArray(size,defaultObj)
{
var _array=[];
for (i=0;i<size;i++)
{
_array[i]=defaultObj
}
return _array;
}
var myArray= myArray(3,"hello");
alert(myArray[2]);
答案 3 :(得分:1)
我认为这就是你要找的东西!
function createMatrix ()
{
var matrix = Array.prototype.slice.call(arguments);
return matrix.length > 0 ? matrix : [0] ;
}
创建任意维度的矩阵createMatrix() - &gt; [0]
createMatrix(1,2,3) - &gt; [1,2,3] - 向量行createMatrix([1],[2],[3]) - &gt; [[1],[2],[3]] - 矢量列
createMatrix( [1,2,3], [4,5,6], [7,8,9] )
- &GT; [[1,2,3],[4,5,6],[7,8,9]] - 3×3矩阵
答案 4 :(得分:1)
我认为你可以做类似下面的事情,我已经尝试在不使用循环的情况下填充50个1,但我认为内部拆分和连接都使用循环。
var a = new Array(50).join(1).split('').join(',');
答案 5 :(得分:1)
这是创建数组的真正
No Loop
方法!
const createNoLoopArray = (m, n) => {
let arr = new Array(m+1);
// let arr = [];
// arr.length = m;
return arr.join(n).split('').map((value) => parseInt(value, 10));
}
let result = createNoLoopArray(7, 3);
console.log(result);
// (7) [3, 3, 3, 3, 3, 3, 3]
答案 6 :(得分:0)
不,我认为这不可能在vanilla JavaScript中使用。
此代码将创建一个包含10个零的Array
:
var array = [ ] , filler = 1 ;
var i = 0 , length = 10 ;
while(i < length) array.push(filler) , i = i + 1;
alert("(!) array >> " + array) ;
答案 7 :(得分:0)
这是我找到的最佳解决方案,不使用eval并且循环不会太长,因此浏览器不会崩溃:
var j=0,l=new Object();
l.id=1
var array=[l];
while(array.length<10000){
array=array.concat(array);
}
array=array.slice(0,10000);
console.log(array.length);
当然,数组的长度在循环之前越大,循环越快。
答案 8 :(得分:0)
我会说你的问题的答案是:它无法完成。
不是Java,可能不是任何其他编程语言。
如果你考虑底层机器,你要求的是:可以存储区域 n特定类型的值初始化为相同的值而不循环。
我想如果底层机器中有一些特殊的机制,例如没有循环,这是可能的。一种使内存区域无效的方法。但即便如此,在大多数情况下,该机制实际上会遍历所有值。
答案 9 :(得分:-1)
可能不是一个实用的解决方案,并且不适用于IE&lt; 9,但技术上没有(显式)循环:
var a = [];
a.length = 10000;
a.forEach(function(e, i) {
a[i] = object;
});