Javascript - 展平对象的嵌套数组。弄得漂亮吗?

标签 javascript arrays

我正在努力将一组数据格式化为一个数组以用于表格。我有一个这样的数据集

data = [{
  hello: 'world',
  children: [{
    foo: 'bar'
  }]
}]

我希望将这些数据放入一个数组中,同时使用 parent: true bool 标记所有父节点。所以我可以把它们全部放到一个表中,但在 parent 和 child 之间仍然有一个区分因素。我知道我可以为表循环两次,但我这样做是为了可重用性目的。我在下面有一个工作代码块。

  formattedData (data) {
    const formattedData = []
    data.map(dataPoint => {
      let obj = dataPoint
      obj['parent'] = true
      formattedData.push(dataPoint)
      if (dataPoint.children) {
        dataPoint.children.map(c => {
          formattedData.push(c)
        })
      }
    })
    return formattedData
  }

结果数据如下所示:

data = [{
  hello: 'world', 
  parent: true
}, {
  foo: 'bar'
}]

只是检查是否有更好/更有效/更漂亮的方法来执行此操作(或者我这样做的方式是否应该这样做)。提前致谢!

最佳答案

  • 如果您打算使用 let obj = dataPoint 复制对象,以免改变传递给函数的参数,并且该对象是一个简单的 Object,那么您可以使用对象传播来复制它并添加属性

  • Array.prototype.flatMap现在已经存在(并且可以像其他东西一样向后兼容垫片)

  • 如果不使用this,为什么它是一个类方法?

const getFormattedData = data =>
  data.flatMap(dataPoint => [
    {...dataPoint, parent: true},
    ...dataPoint.children || [],
  ])

或者,如果您还想删除 children 属性:

const getFormattedData = data =>
  data.flatMap(({children, ...dataPoint}) => [
    {...dataPoint, parent: true},
    ...children || [],
  ])

关于Javascript - 展平对象的嵌套数组。弄得漂亮吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53735336/

相关文章:

python - 将 numpy 数组保存到 txt

javascript - IE8 中的 RequireJs : "no define call for.."

javascript - 如果彼此相邻,则一起加入一周中的几天

javascript - 我如何要求/提示 Google 不要将页面上的内容编入索引?

javascript - 'Enter key' 不会在 Firefox 中提交表单,但在 Chrome 中会,为什么?

Python:根据升序x数组对y值数组进行排序

Java - 总结除特定部分之外的数组值

php - 仅使用每个类别 id 之一对数据集进行排序

c++ - CUDA:统一内存,使用数组

javascript - 用于检查字符串是否为 a-zA-Z0-9 的正则表达式