编写一个函数()返回所有元素和数组(包括嵌套数组)的数量?
2023-01-26
151
使用递归和三元运算符。如果您能解释一下它的安排,我将不胜感激。
console.log (deepCount([]));
0
console.log (deepCount([1 ,2 ,3]));
3
console.log (deepCount(["x", "z", ["y"]]));
4
console.log (deepCount([1, 2,[3, 4,[5]]]));
7
console.log (deepCount([[[[]]]]));
3
let arr = [1, 2, [3, 4[5]]];
function deepCount(arr) {
let result = arr.length;
for (const char of arr) {
if (Array.isArray(arr[char])) {
result += arr[char];
deepCount(arr);
}
return result;
};
2个回答
询问:使用 递归 和 三元运算符 :
就我而言(除了 Barmar 的评论外),您的第一个错误是没有缩进代码:这是检查括号奇偶校验的简单方法。当然,我推荐 Whitesmiths 风格 。
K&R 和其他带有“埃及括号”的风格不适合进行此检查...
console.log( deepCount( [] )); // --> 0
console.log( deepCount( [1 ,2 ,3] )); // --> 3
console.log( deepCount( ["x", "z", ["y"]] )); // --> 4
console.log( deepCount( [1, 2,[3, 4,[5]]] )); // --> 7
console.log( deepCount( [[[[]]]] )); // --> 3
function deepCount( arr )
{
let count = arr.length;
for (const elm of arr)
{
count += Array.isArray(elm) ? deepCount(elm) : 0;
}
return count;
}
The same, in a "single" line of code:
const deepCount = arr =>
arr.reduce((N,x)=>N+=(Array.isArray(x)?deepCount(x):0),arr.length);
console.log( deepCount( [] )); // --> 0
console.log( deepCount( [1 ,2 ,3] )); // --> 3
console.log( deepCount( ["x", "z", ["y"]] )); // --> 4
console.log( deepCount( [1, 2,[3, 4,[5]]] )); // --> 7
console.log( deepCount( [[[[]]]] )); // --> 3
Mister Jojo
2023-01-26
-
当您使用
for-of
时,迭代变量是数组元素,而不是其索引。因此,您应该使用char
,而不是arr[char]
。我已将char
重命名为element
,因为它与字符无关。 -
您需要将递归调用返回的值添加到
result
,而不是将数组元素添加到其中。 -
return result
不应位于循环内部,而应位于末尾。
function deepCount(arr) {
let result = arr.length;
for (const element of arr) {
if (Array.isArray(element)) {
result += deepCount(element);
}
};
return result;
}
console.log(deepCount([]));
console.log(deepCount([1, 2, 3]));
console.log(deepCount(["x", "z", ["y"]]));
console.log(deepCount([1, 2, [3, 4, [5]]]));
console.log (deepCount([[[[]]]]));
Barmar
2023-01-26