js递归返回想要的值

  let a = [{
        "k": [{
          "k": [{
            "k": [{
              "name": "名称4"
            },{
              "name": "名称5"
            }],
            "name": "名称2"
          }],
          "name": "名称1"
        }],
        "name": "名称0"
      }, 
      {
        "k": [{
          "k": [{
            "k": [{
              "name": "名称44"
            }],
            "name": "名称22"
          }],
          "name": "名称11"
        }],
        "name": "名称00"
      }]
      
      // 希望的结果
      ['名称0-名称1-名称2-名称3-名称4','名称0-名称1-名称2-名称3-名称5', '名称00-名称11-名称22-名称33-名称44']
阅读 2.4k
3 个回答

老哥你 a 里面没有 3,怎么期望输出 3。

  const flat = l1Arr => [].concat(...l1Arr)
  const iter = arr =>
    flat(arr.map(
      i => i.k
          ? iter(i.k).map(j => i.name + '-' + j)
          : i.name
    ))
  const output = iter(a)
  console.log(output)
// [ '名称0-名称1-名称2-名称4', '名称0-名称1-名称2-名称5', '名称00-名称11-名称22-名称44' ]

兄弟你可以先将JSON数据转化为 对象 var a = JSON.parse(a); , 函数体内部利用for(var k in obj)去做,但是要加个判断条件你因为你是你序输出的所以你的颠倒一下,这里可以利用reverse来颠倒,里面的用递归!

function _concat(arr){
    var resulte = [], str = ''
    !function loop(arr,str){
        arr.forEach(item => {
            var s = str + '-' + item.name; 
            Object.prototype.toString.apply(item.k) === "[object Array]" ? loop(item.k,s) : resulte.push(s.replace('-',''))
        })
    }(arr,str)
    return resulte
}
_concat(a)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题