, . .
:
, :
function nested() {
var result = [];
for (var zeros = arguments[arguments.length - 1]; zeros > 0; zeros--) {
result.push(0);
}
for (var i = arguments.length - 2; i >= 0; i--) {
var _clone = [];
for (var clones = arguments[i]; clones > 0; clones--) {
_clone.push(result.slice(0));
}
result = _clone;
}
if (arguments.length > 2) {
return JSON.parse(JSON.stringify(result));
}
return result;
}
- , , . gazillion (, mocha AVA). ( ), :
var tests = [
{
input: [2, 2],
output: [
[0, 0],
[0, 0]
]
},
{
input: [2, 3],
output: [
[0, 0, 0],
[0, 0, 0]
]
},
{
input: [3, 2],
output: [
[0, 0],
[0, 0],
[0, 0]
]
},
{
input: [3, 2, 1],
output: [
[
[0], [0]
],
[
[0], [0]
],
[
[0], [0]
]
]
},
];
tests.forEach(function(test) {
var result = nested.apply(null, test.input);
var matches = JSON.stringify(result) === JSON.stringify(test.output);
if (!matches) {
console.error('failed input', test.input);
console.log('got', result, 'but expected', rest.output);
} else {
console.info('passed', test.input);
}
});
, , nested(3, 0), nested(0, 4), nested(3, -1) nested(-1, 2).