首页 > 解决方案 > 使用 lodash.js 以所需格式重塑对象数组

问题描述

如何根据列格式化数据?在这里,我需要根据 category1 和 category2 文件将一行转换为 2 行。

输入数据格式:

[
  {
    'Name' : 'Project A',
    'category1' : 20,
    'category2 : 10
   }
]

输出数据格式:

        [
          {
            'Name' : 'Project A',
            'category' : 'category1',
            'value' : 20
           },
           {
            'Name' : 'Project A',
            'category' : 'category2',
            'value' : 10
           }
        ]

标签: javascriptunderscore.jslodash

解决方案


您的输入非常模糊,但我已经构建了一个适用于多个对象的解决方案,并且如果这些对象的类别比其他对象多,假设键包含category

const arr = [{
  'Name': 'Project A',
  'category1': 20,
  'category2': 10
}]

const unpack = arr => arr.flatMap(o =>
  Object.entries(o).filter(([key]) => key.includes('category'))
    .map(([category, value]) => ({ Name: o.Name, category, value }))
)

console.log(unpack([{ 'Name': 'Project A', 'category1': 20, 'category2': 10 }]))
console.log(unpack([{ 'Name': 'Project A', 'category1': 20, 'category2': 10, 'category3': 5 }]))
console.log(unpack([
  { 'Name': 'Project A', 'category1': 20, 'category2': 10, 'category3': 5 },
  { 'Name': 'Project B', 'category1': 20, 'category2': 10 }
]))


推荐阅读