如何使用递归-JavaScript将元素插入数组中的所有位置?

我们需要声明一个函数,比如insertAllPositions,它带有两个参数:

一个元素x和一个数组arr。函数必须返回一个数组数组,每个数组都与arr对应,并且x插入在可能的位置。

也就是说,如果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 ] ]