рони,
Смотри, я меняю только размерность, строка 25, всё остальное то же самое.
// Multidimensional to single dimension representation
var m2sdim = ( function () {
var argNames = 'abcdefghijklmnopqrstuvwxyz'.split('');
return function ( /* arguments */ ) {
var dimension = arguments.length;
var fnSource = argNames[0];
var size = +arguments[0];
for ( var i = 1; i < dimension; i++ ) {
fnSource = '(' + fnSource + '*' + +arguments[i] + '+ +' + argNames[i] + ')';
size *= +arguments[i];
}
var fn = Function.apply( null, argNames.slice( 0, dimension ).concat( 'return ' + fnSource ));
fn.size = size;
return fn;
};
})();
var test = m2sdim(2,122,2,9999);
console.log([
test.toString(),
test(0,0,0,1),
test(0,0,1,0),
test(0,1,0,0),
test(1,0,0,0),
test.size // размер массива
].join('\n'));
Обрати внимание на исходник скомпилированной функции.
Аргументы идут с первого, коэффициенты - со второго. Вот и весь компот.