我有点困惑,但是我编写了一个计算数组中维数的函数。这段代码在我的工作环境中执行得很好,但是现在我处于个人环境中,函数(countDims()
)不再返回值。它似乎一直执行到return语句。这是jsfiddle。关于为什么会这样的想法?
还有一个片段。
function constantArray(val,...dim){
// Function returns an nd-array of the given constant value. Note that the ellipsis in
// the function definition enables a variable number of arguments. Note that at least one
// dimension value must be given, and all desired dimension extents must be defined as
// integer lengths.
arr_out = [];
// The initial value forms the kernel of the array
for (i = 0; i < dim[dim.length - 1]; i++) {
arr_out.push(val);
}
// Reducing the dimension list on each pass provides a natural stopping point for recursion
dim.pop(dim[dim.length - 1]);
if (dim.length == 0) {
return arr_out;
}
else {
// Note that the ellipsis in the function call allows us to pass the remaining dimensions
// as a list. In this context, the ellipsis is the "spread" operator.
return constantArray(arr_out, ...dim);
}
}
function countDims(arr, dim_cnt){
// Function returns the number of dimensions in an array. Note that we keep the dimension
// count in the function arguments to ease updating during recursive calls.
if (dim_cnt == undefined) {dim_cnt = 0};
if (Array.isArray(arr)) {
dim_cnt++;
countDims(arr[0], dim_cnt);
}
else {
console.log("The dimension count of this array is "+dim_cnt);
console.log("I am in the return space!")
return dim_cnt;
}
}
x = constantArray(0, 4, 5)
console.log(x)
x_dims = countDims(x)
console.log(x_dims)
&#13;
答案 0 :(得分:3)
你忘了在countDims
的第一个条件下回来吗?
if (Array.isArray(arr)) {
dim_cnt++;
return countDims(arr[0], dim_cnt);
function constantArray(val, ...dim) {
// Function returns an nd-array of the given constant value. Note that the ellipsis in
// the function definition enables a variable number of arguments. Note that at least one
// dimension value must be given, and all desired dimension extents must be defined as
// integer lengths.
var arr_out = [];
// The initial value forms the kernel of the array
for (let i = 0; i < dim[dim.length - 1]; i++) {
arr_out.push(val);
}
// Reducing the dimension list on each pass provides a natural stopping point for recursion
dim.pop(dim[dim.length - 1]);
if (dim.length == 0) {
return arr_out;
} else {
// Note that the ellipsis in the function call allows us to pass the remaining dimensions
// as a list. In this context, the ellipsis is the "spread" operator.
return constantArray(arr_out, ...dim);
}
}
function countDims(arr, dim_cnt = 0) {
// Function returns the number of dimensions in an array. Note that we keep the dimension
// count in the function arguments to ease updating during recursive calls.
//if (dim_cnt == undefined) {dim_cnt = 0};
if (Array.isArray(arr)) {
dim_cnt++;
return countDims(arr[0], dim_cnt);
} else {
console.log("The dimension count of this array is " + dim_cnt);
console.log("I am in the return space!")
debugger
return dim_cnt;
}
}
var x = constantArray(0, 4, 5)
console.log(x)
var x_dims = countDims(x)
console.log(x_dims)
&#13;
答案 1 :(得分:2)
你需要返回countDims()调用的结果。
if (Array.isArray(arr)) {
dim_cnt++;
// Here
return countDims(arr[0], dim_cnt);
} else {