gpt4 book ai didi

Javascript 练习 - 反转二维数组

转载 作者:数据小太阳 更新时间:2023-10-29 04:38:38 28 4
gpt4 key购买 nike

反转二维数组的值,可以扩展 n 次。

[1, [2, [3, ... [n, null]]]]

给定:

  1. 所有数组的长度始终为 2
  2. 列表中的最后一个数组将包含一个 null 索引 1

示例:

  • [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 );

http://jsfiddle.net/5b4xntwg/

我绝不是javascript专家,所以我想知道是否有更好的方法来做到这一点?

最佳答案

这里有一个没有副作用的更简洁的方法:

function r(arr, acc) {
acc = acc || null;
return arr ? r(arr[1], [arr[0], acc]) : acc;
}

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]]])

在最后一次调用时,arrnull(这是基本情况),因此它只返回 acc,其值为[3, [2, [1, null]]]

值得一提的是,这个嵌套数组结构基本上是一个cons list。 , 在函数式编程中广泛使用,非常有利于递归操作。

最后,这是一个迭代版本:

function r(arr) {
var acc = null;
while (arr) {
acc = [arr[0], acc];
arr = arr[1];
}
return acc;
}

关于Javascript 练习 - 反转二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25533394/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com