cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Dua cara menulis rekursi, mengapa yang pertama melaporkan ralat?

var obj = [
  { type: 'number' },
  { type: 'string' },
  { 
    type: 'array',
    children: [
      { type: 'number' },
      { type: 'string' }
    ]
  }
]

var convert = function(obj) {
  return obj.map(o => ({
    'number': 1,
    'string': 's',
    'array': convert(o.children)
  }[o.type]))
}

var convert2 = function(obj) {
  return obj.map(o => {
    if (o.type === 'number') {
      return 1
    } else if (o.type === 'string') {
      return 's'
    } else if (o.type === 'array') {
      return convert2(o.children)
    } else {
      return undefined
    }
  })
}

var converted = convert(obj)
var converted2 = convert2(obj)
阿神阿神2843 hari yang lalu567

membalas semua(3)saya akan balas

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 13:34:36

    Sebabnya ialah setiap atribut obj yang digunakan untuk penghakiman telah dikira sekali, dan sekatan bersyarat boleh ditambah untuk memperbaikinya:

    var convert = function(obj) {
      return obj.map(o => ({
        'number': o.type === 'number ' && 1,
        'string': o.type === 'string ' &&  's',
        'array': o.type === 'array ' &&  convert(o.children)
      }[o.type]))
    }

    Apabila terdapat sedikit syarat untuk dinilai, anda boleh menggunakan beberapa syarat trinokular untuk menilai Jika terdapat terlalu banyak penghakiman sedemikian, kaedah penulisan ini harus lebih cantik Jika anda tidak boleh menerimanya, anda mungkin perlu menulis.

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 13:34:36

    Kerana rekursi anda tidak mempunyai syarat penamatan

    balas
    0
  • 習慣沉默

    習慣沉默2017-05-16 13:34:36

    Kesilapannya ialah tiada anak apabila yang pertama dilaporkan

    var convert = function(obj) {
      return obj.map(o => ({
        'number': 1,
        'string': 's',
        'array': o.children?convert(o.children):""//假设没有的时候返回空咯
      }[o.type]))
    }

    balas
    0
  • Batalbalas