如何使用递归在数组的所有位置插入一个元素 - JavaScript?
我们需要声明一个函数,比如说 insertAllPositions,它接收两个参数 -
一个元素 x,和一个数组 arr。函数必须返回一个数组的数组,其中每个数组对应于插入 x 的某个可能位置的 arr。
也就是说,如果 arr 的长度为 N,那么结果是一个包含 N + 1 个数组的数组 -
例如,insertAllPositions(10, [1,2,3]) 的结果应该是 -
const output = [ [10,1,2,3], [1,10,2,3], [1,2,10,3], [1,2,3,10] ];
我们需要仅使用递归编写此函数。
示例
以下是代码 -
const arr = [1, 2, 3]; const num = 10; const insertAllPositions = (num, arr) => { return arr.length ? [[num, ...arr]] .concat(insertAllPositions(num, arr.slice(1)) .map(el => { return [arr[0]].concat(el); })) : [[num]] }; console.log(insertAllPositions(num, arr));
输出
这会在控制台上产生以下输出 -
[ [ 10, 1, 2, 3 ], [ 1, 10, 2, 3 ], [ 1, 2, 10, 3 ], [ 1, 2, 3, 10 ] ]
广告