我正在寻找下面的任何替代方法来创建一个包含1到N的JavaScript数组,其中N仅在运行时已知.
var foo = [];
for (var i = 1; i <= N; i++) {
foo.push(i);
}
Run Code Online (Sandbox Code Playgroud)
对我而言,感觉应该有一种没有循环的方法.
在Perl中,我可以使用以下语法多次重复一个字符:
$a = "a" x 10; // results in "aaaaaaaaaa"
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来实现这个Javascript?我显然可以使用一个函数,但我想知道是否有任何内置方法,或其他一些聪明的技术.
JavaScript中的尾随逗号是标准的,还是像Chrome和Firefox这样的大多数浏览器只是容忍它们?
我认为它们是标准的,但IE8遇到一个当然IE浏览器不支持的东西几乎不意味着它不标准.
这是我的意思的一个例子(在书籍数组的最后一个元素之后):
var viewModel = {
books: ko.observableArray([
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } }, // <--right there
]),
currentTemplate: ko.observable("bookTemplate1"),
displayTemplate: function() { return viewModel.currentTemplate(); }
};
Run Code Online (Sandbox Code Playgroud) 我在es-discuss邮件列表中遇到了以下代码:
Array.apply(null, { length: 5 }).map(Number.call, Number);
Run Code Online (Sandbox Code Playgroud)
这产生了
[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
为什么这是代码的结果?这里发生了什么事?
在javascript中如何创建给定大小的空数组
Psuedo代码:
X = 3;
createarray(myarray, X, "");
Run Code Online (Sandbox Code Playgroud)
输出:
myarray = ["","",""]
Run Code Online (Sandbox Code Playgroud) 为什么TypedArrays不像通常的数组那么快?我想为CLZ使用precalc值(计算前导零函数).而且我不希望他们像往常一样解释对象?
http://jsperf.com/array-access-speed-2/2
准备代码:
Benchmark.prototype.setup = function() {
var buffer = new ArrayBuffer(0x10000);
var Uint32 = new Uint32Array(buffer);
var arr = [];
for(var i = 0; i < 0x10000; ++i) {
Uint32[i] = (Math.random() * 0x100000000) | 0;
arr[i] = Uint32[i];
}
var sum = 0;
};
Run Code Online (Sandbox Code Playgroud)
测试1:
sum = arr[(Math.random() * 0x10000) | 0];
Run Code Online (Sandbox Code Playgroud)
测试2:
sum = Uint32[(Math.random() * 0x10000) | 0];
Run Code Online (Sandbox Code Playgroud)

PS可能是我的性能测试无效随时纠正我.
假设我手上有一个数字 18,而不是一个数组。
给定数字 X 而不是 X 元素数组,在 JS 中创建功能循环的最佳方法是什么?
我可以做这个:
[1,2,3].forEach(function(){
));
Run Code Online (Sandbox Code Playgroud)
但如果我有数字 3
我可以
for(var i = 0; i < 3; i++){
}
Run Code Online (Sandbox Code Playgroud)
但我希望该循环能够正常工作
JSlint不喜欢使用Array构造函数,并且没有允许它们的JSLint选项.因此,要创建长度为n的数组,不允许以下内容:
var arr = new Array(n);
Run Code Online (Sandbox Code Playgroud)
以下是我能解决这个问题的唯一方法吗?
var arr = [];
arr.length = 5;
Run Code Online (Sandbox Code Playgroud)
在正常情况下,这不是什么大问题(使用两行代码而不是一行代码),但我很遗憾无法使用简洁的字符串乘法器hack:
function repeat(str, times) {
return new Array(times + 1).join(str);
}
Run Code Online (Sandbox Code Playgroud) 在大多数javascript应用程序中,我通常会声明一个类似的数组
var x = [];
Run Code Online (Sandbox Code Playgroud)
但我在MDN上看到了大量的示例代码,而不是采用这种方法
var x = new Array(10);
Run Code Online (Sandbox Code Playgroud)
使用V8 /其他现代JS引擎,您是否看到了这种或那种方式的真正好处?
我正在尝试创建一个零数组,我可以使用以下方法获得所需的结果:
Array.apply(null, Array(9)).map(Number.prototype.valueOf, 0)
Run Code Online (Sandbox Code Playgroud)
但是如果我使用的话,我就错了:
new Array(9).map(Number.prototype.valueOf, 0)
Run Code Online (Sandbox Code Playgroud)
就此而言,任何映射结果的尝试都无法在映射上new Array(len)返回预期的数组.有人能帮助我理解为什么会这样吗?
javascript ×10
arrays ×2
character ×1
ecmascript-5 ×1
jslint ×1
node.js ×1
performance ×1
repeat ×1
string ×1
typed-arrays ×1