// 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(5,6,7,8);
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'));
Как можно догадаться, тут максимум на 26 измерений. Но для примера, думаю, достаточно.
![](images/smilies/smile.gif)