【问题标题】:How to iterate array using recursive function? [closed]如何使用递归函数迭代数组? [关闭]
【发布时间】:2020-01-22 11:24:05
【问题描述】:

我有数组:

x = ['A', 'AA', 'AAA'];

我怎样才能迭代它所以输出是:

car_A
car_A_AA
car_A_AA_AAA
x.forEach(value => {
 ???
});

我该如何做这个最简单的方法?我必须递归调用方法吗?

任何帮助将不胜感激

【问题讨论】:

  • 或完整输出:x.map((_, i, arr) => "car_" + arr.slice(0, i + 1).join("_"));.
  • @SebastianSimon 我得到以下输出:["car_A,AA,AAA"] 实际输出:["car_A, car_A_AA, car_A_AA_AAA"]
  • @TanvirAlam No, you don’t.

标签: javascript arrays iteration


【解决方案1】:

经典的带有连接的 for 循环怎么样:

const x = ["A", "AA", "AAA"]
const prefix = "car_"
for (let i = 1; i <= x.length; i++) {
  console.log(prefix + x.slice(0, i).join("_"))
}

相关 MDN 文档:

编辑:如果您需要数组形式的输出:

const x = ["A", "AA", "AAA"]
const prefix = "car_"
const output = []
for (let i = 1; i <= x.length; i++) {
  output.push(prefix + x.slice(0, i).join("_"))
}
console.log(output)

【讨论】:

  • 我得到以下输出:["car_A,AA,AAA"] 实际输出:["car_A, car_A_AA, car_A_AA_AAA"]
  • @TanvirAlam 查看附加代码。
【解决方案2】:

如果您愿意,可以使用递归函数。

function print(pre, sep, arr, i) {
 if (i >= arr.length) return;

 const s = pre + sep + arr[i];
 console.log(s);
 print(s, sep, arr, i+1);
}

const x = ['A', 'AA', 'AAA'];

print("car", "_", x, 0);

【讨论】:

    【解决方案3】:

    我认为@Sebastian-Simon 的回应是迄今为止最好的。您可以在带有 slicejoinmap 函数中或在 reduce 中执行此操作,但请注意您正在使用该数组推送产生副作用。

    const x = ['A', 'AA', 'AAA'];
    
    const result = x.map((_, i, arr) => "car_" + arr.slice(0, i + 1).join("_"));
    
    const result2 = [];
    x.reduce((acc, val, i, arr) => {
      acc += '_' + val;
      result2.push('car' + acc);
      return acc;
    }, '');
    
    console.log(result);
    console.log(result2);

    Reduce 选项的性能更好。

    【讨论】:

      【解决方案4】:

      reduce() 方法对数组的每个元素执行(您提供的)reducer 函数,从而产生单个输出值。

      Array.prototype.reduce()

          function handle_format (pre, connect, list){
               let result = []; 
               let tmp = []
               list.forEach(function(item){
                   tmp.push(item)
                   result.push( pre + connect + tmp.reduce(function(item, res){ return res = item + connect + res  }) )
               });
               return result;
          }
      
          handle_format (prefix, '_', list)
          // return ["car_A", "car_A_AA", "car_A_AA_AAA"]
      
      

      【讨论】:

      • 我尝试修正我的答案。让答案更有价值。
      • 抱歉,我发现了真正的问题并已解决。谢谢你的建议。
      猜你喜欢
      • 2021-12-09
      • 2019-04-03
      • 2012-11-12
      • 2022-06-28
      • 2021-12-31
      • 1970-01-01
      • 2016-03-01
      • 2021-03-11
      • 2019-08-24
      相关资源
      最近更新 更多