javascript - Dua cara menulis rekursi, mengapa yang pertama melaporkan ralat?
阿神
阿神 2017-05-16 13:32:36
0
3
535
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)
阿神
阿神

闭关修行中......

membalas semua(3)
过去多啦不再A梦

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.

曾经蜡笔没有小新

Kerana rekursi anda tidak mempunyai syarat penamatan

習慣沉默

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]))
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan