admin管理员组文章数量:1431927
Reverse the values of a 2 dimensional array that could extend n
times.
[1, [2, [3, ... [n, null]]]]
Given:
- All arrays always have a length of 2
- Last array in the list will contain an index 1 of null
Example:
[1, [2, [3, null]]]
will output[3, [2, [1, null]]]
[1, [2, [3, [4, null]]]]
would output[4, [3, [2, [1, null]]]]
I'm not sure if I'm describing it right but I came across this exercise today and came up with a fairly obvious solution.
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 );
/
I am by no means a javascript expert, so I was wondering if there was a better way to do it?
Reverse the values of a 2 dimensional array that could extend n
times.
[1, [2, [3, ... [n, null]]]]
Given:
- All arrays always have a length of 2
- Last array in the list will contain an index 1 of null
Example:
[1, [2, [3, null]]]
will output[3, [2, [1, null]]]
[1, [2, [3, [4, null]]]]
would output[4, [3, [2, [1, null]]]]
I'm not sure if I'm describing it right but I came across this exercise today and came up with a fairly obvious solution.
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 );
http://jsfiddle/5b4xntwg/
I am by no means a javascript expert, so I was wondering if there was a better way to do it?
Share Improve this question edited Aug 27, 2014 at 17:25 gen_Eric 227k42 gold badges303 silver badges342 bronze badges asked Aug 27, 2014 at 17:24 rginrgin 2,3114 gold badges24 silver badges33 bronze badges 7-
1
Does the array always end in a
null
? Also, your example seems to leave that out of the final result. – gen_Eric Commented Aug 27, 2014 at 17:27 - 1 I'm not sure that "2D" and "reverse" are quite the right terms here. This is a nested array and you are, for want of a better term, turning it inside out. – Matt Burland Commented Aug 27, 2014 at 17:31
- This question appears to be off-topic because it belongs on codereview.stackexchange. – Matt Burland Commented Aug 27, 2014 at 17:33
-
@RocketHazmat- The bottom array should always end with
null
. Something that I missed, apparently. – rgin Commented Aug 27, 2014 at 17:33 - @MattBurland - Yeah, I suppose you're right. Turning it inside out is more appropriate. But like I said, I really just came across this exercise today and don't really know how to describe it. (it was shown to me by a co-worker). – rgin Commented Aug 27, 2014 at 17:34
1 Answer
Reset to default 8Here's a more concise approach that doesn't have side-effects:
function r(arr, acc) {
acc = acc || null;
return arr ? r(arr[1], [arr[0], acc]) : acc;
}
http://jsfiddle/5b4xntwg/1/
It goes through the following recursive calls for the input [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]]])
On the last call, arr
is null
(this is the base case), so it just returns acc
, which has the value [3, [2, [1, null]]]
.
One thing worth mentioning is that this nested array structure is basically a cons list, which is used extensively in functional programming and is very conducive to recursive operations.
Lastly, here's an iterative version:
function r(arr) {
var acc = null;
while (arr) {
acc = [arr[0], acc];
arr = arr[1];
}
return acc;
}
本文标签: Javascript ExerciseReverse 2 dimensional arrayStack Overflow
版权声明:本文标题:Javascript Exercise - Reverse 2 dimensional array - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745594645a2665402.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论