鍍金池/ 問(wèn)答/HTML/ js遞歸返回想要的值

js遞歸返回想要的值

  let a = [{
        "k": [{
          "k": [{
            "k": [{
              "name": "名稱(chēng)4"
            },{
              "name": "名稱(chēng)5"
            }],
            "name": "名稱(chēng)2"
          }],
          "name": "名稱(chēng)1"
        }],
        "name": "名稱(chēng)0"
      }, 
      {
        "k": [{
          "k": [{
            "k": [{
              "name": "名稱(chēng)44"
            }],
            "name": "名稱(chēng)22"
          }],
          "name": "名稱(chēng)11"
        }],
        "name": "名稱(chēng)00"
      }]
      
      // 希望的結(jié)果
      ['名稱(chēng)0-名稱(chēng)1-名稱(chēng)2-名稱(chēng)3-名稱(chēng)4','名稱(chēng)0-名稱(chēng)1-名稱(chēng)2-名稱(chēng)3-名稱(chēng)5', '名稱(chēng)00-名稱(chēng)11-名稱(chēng)22-名稱(chēng)33-名稱(chēng)44']
回答
編輯回答
枕邊人

兄弟你可以先將JSON數(shù)據(jù)轉(zhuǎn)化為 對(duì)象 var a = JSON.parse(a); , 函數(shù)體內(nèi)部利用for(var k in obj)去做,但是要加個(gè)判斷條件你因?yàn)槟闶悄阈蜉敵龅乃阅愕念嵉挂幌?,這里可以利用reverse來(lái)顛倒,里面的用遞歸!

2017年9月10日 04:40
編輯回答
情未了

老哥你 a 里面沒(méi)有 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)
// [ '名稱(chēng)0-名稱(chēng)1-名稱(chēng)2-名稱(chēng)4', '名稱(chēng)0-名稱(chēng)1-名稱(chēng)2-名稱(chēng)5', '名稱(chēng)00-名稱(chēng)11-名稱(chēng)22-名稱(chēng)44' ]
2018年9月9日 02:51
編輯回答
莓森
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)
2018年5月14日 23:41