gpt4 book ai didi

javascript - 展开 javascript 循环

转载 作者:行者123 更新时间:2023-11-29 14:58:39 26 4
gpt4 key购买 nike

我有一个像这样的立方 3D 数组“类”:

function Array3D(size) {
this.data = new Array(size*size*size);
var makeIndex = function(p) {
return p[0] + p[1]*size + p[2]*size*size;
}
this.get = function(p) { return this.data[makeIndex(p)]; };
this.set = function(p, value) { this.data[makeIndex(p)] = value; };
}

我想泛化到多个维度,但不影响访问性能。这是我的简单方法:

function ArrayND(size, N) {
var s = 1;
for(var i = 0; i < N; i++) s *= size;
this.data = new Array(s);

var makeIndex = function(p) {
var ind = 0;
for(var i = N-1; i >= 0; i--)
ind = ind*size + p[i];
return ind;
}
this.get = function(p) { return this.data[makeIndex(p)]; };
this.set = function(p, value) { this.data[makeIndex(p)] = value; };
}

有什么方法可以“展开”我的 makeIndex 函数,以便在声明时对循环求值一次,而不是在调用时求值?使用 evalnew Function() 的运行时生成代码的开销会抵消不循环的好处吗?

sizeN 本质上都是常量,所以重复的乘法和迭代感觉就像是只能做一次的事情。

最佳答案

这是执行此操作的一种方法,它使用 new Function 将函数内容构建为字符串:

var makeIndex = (function() {
var code = []
var scale = 1;
for(var i = 0; i < N; i++) {
code.push("p["+i+"]*"+scale);
scale *= size;
}
return new Function('p', 'return '+code.join('+'));
})();

关于javascript - 展开 javascript 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com