反转可能延长n
时间的二维数组的值.
[1, [2, [3, ... [n, null]]]]
Run Code Online (Sandbox Code Playgroud)
鉴于:
例:
[1, [2, [3, null]]]
将输出 [3, [2, [1, null]]]
[1, [2, [3, [4, null]]]]
会输出 [4, [3, [2, [1, null]]]]
我不确定我是否正确描述它,但我今天遇到了这个练习,并提出了一个相当明显的解决方案.
var ars = [1, [2, [3, null]]], rev = null;
function r(x) {
rev = (rev == null) ? [x[0]] : [x[0], rev];
if( x[1] !== null )
r(x[1]);
}
r(ars);
console.log( rev );
Run Code Online (Sandbox Code Playgroud)
我绝不是一个javascript专家,所以我想知道是否有更好的方法来做到这一点?
这是一种更简洁的方法,没有副作用:
function r(arr, acc) {
acc = acc || null;
return arr ? r(arr[1], [arr[0], acc]) : acc;
}
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/5b4xntwg/1/
它通过以下递归调用输入[1, [2, [3, null]]]
:
r([1, [2, [3, null]]] )
r([2, [3, null]] , [1, null] )
r([3, null] , [2, [1, null]] )
r(null , [3, [2, [1, null]]])
Run Code Online (Sandbox Code Playgroud)
在最后一次调用中,arr
是null
(这是基本情况),所以它只返回acc
,它具有值[3, [2, [1, null]]]
.
值得一提的是,这个嵌套数组结构基本上是一个缺点列表,在函数式编程中广泛使用,非常有利于递归操作.
最后,这是一个迭代版本:
function r(arr) {
var acc = null;
while (arr) {
acc = [arr[0], acc];
arr = arr[1];
}
return acc;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1220 次 |
最近记录: |