如何修复以下mapDeep函数?

时间:2017-06-14 03:57:37

标签: javascript ecmascript-6

我正在尝试构建 mapDeep 函数(以递归方式映射嵌套数组):

mapDeep (array, callback) {
  return array.map(item => {
    if (Array.isArray(Object.values(item)[0])) {
      return mapDeep(Object.values(item)[0])
    } else {
      return callback(Object.values(item)[0])
    }
  })
},

mapDeep(input.schema, field => {
  console.log('field:', field)
})

现在我收到以下错误:Uncaught TypeError: callback is not a function

如何修改代码来修复功能?

Codepen

输入:

schema: [{
  fields: [{
    (...)
  }, {
    (...)
  }]
}, {
  fields: [{
    (...)
  }]
}]

1 个答案:

答案 0 :(得分:2)

将参数传递给递归调用:

function mapDeep (array, callback) {
  return array.map(item => {
    if (Array.isArray(Object.values(item)[0])) {
      return mapDeep(Object.values(item)[0], callback)
//                                           ^^^^^^^^
    } else {
      return callback(Object.values(item)[0])
    }
  })
}