在另一个转换结构

问题描述 投票:0回答:2

我有这个结构:

[
  [
    {
      "title": "something",
      "dataKey": "cod"
    },
    {
      "title": "something_2",
      "dataKey": "des"
    },
    {
      "title": "something_3",
      "dataKey": "orc"
    },
    {
      "title": "something_4",
      "dataKey": "orca"
    },
    {
      "title": "something_5",
      "dataKey": "arr"
    },
    {
      "title": "something_6",
      "dataKey": "por"
    }
  ],
  [
    {
      "title": "VALUE_1",
      "dataKey": "cod"
    },
    {
      "title": "VALUE_2",
      "dataKey": "des"
    },
    {
      "title": "VALUE_3",
      "dataKey": "orc"
    },
    {
      "title": "VALUE_4",
      "dataKey": "orca"
    },
    {
      "title": "VALUE_5",
      "dataKey": "arr"
    },
    {
      "title": "VALUE_6",
      "dataKey": "por"
    }
  ]
]

有必要对此结构进行转换,使其如下所示:

[
  [
    { "cod": "something" },
    { "des": "something_2" },
    { "orc": "something_3" },
    { "orca": "something_4" },
    { "arr": "something_5" },
    { "por": "something_6" }
  ],
  [
    { "cod": "VALUE" },
    { "des": "VALUE_2" },
    { "orc": "VALUE_3" },
    { "orca": "VALUE_4" },
    { "arr": "VALUE_5" },
    { "por": "VALUE_6" }
  ]
]

我创建了这个简单的重复结构来完成这个转换。但是,通过执行测试,我有时可以逐行打印,或者返回[[object Object]]。我希望你能帮我理解如何做到这一点。我已经做了很多研究,但我无法理解

var newData = temp1.map((item, i) => {
    temp1[i].map((subItem, j) => {
        ({[subItem.dataKey]: subItem.title});
    })
})
javascript
2个回答
2
投票

干得好:

let data = [
  [
    {
      title: 'something',
      dataKey: 'cod',
    },
    {
      title: 'something_2',
      dataKey: 'des',
    },
    {
      title: 'something_3',
      dataKey: 'orc',
    },
    {
      title: 'something_4',
      dataKey: 'orca',
    },
    {
      title: 'something_5',
      dataKey: 'arr',
    },
    {
      title: 'something_6',
      dataKey: 'por',
    },
  ],
  [
    {
      title: 'VALUE_1',
      dataKey: 'cod',
    },
    {
      title: 'VALUE_2',
      dataKey: 'des',
    },
    {
      title: 'VALUE_3',
      dataKey: 'orc',
    },
    {
      title: 'VALUE_4',
      dataKey: 'orca',
    },
    {
      title: 'VALUE_5',
      dataKey: 'arr',
    },
    {
      title: 'VALUE_6',
      dataKey: 'por',
    },
  ],
];

console.log(
  data.map(x => {
    return x.map(y => {
      let obj = {};
      obj[y.dataKey] = y.title;
      return obj;
    });
  })
);

编辑

在你发布的代码中,你只是错过了回报。

看到:

console.log(
temp1.map((item, i) => {
    return temp1[i].map((subItem, j) => {  // return here
        return ({[subItem.dataKey]: subItem.title}); // return here
    })
})

1
投票

你真的很亲密,你只是:

  1. 忘了返回内部map的结果(在下面,我通过使用简洁的箭头函数而不是一个详细的函数[一个函数体[你使用])来做到这一点,以及
  2. 当你已经拥有temp1[i]时,没有必要使用item

所以:

const newData = temp1.map(item =>
  item.map(subItem => ({[subItem.dataKey]: subItem.title}))
);

或者用一个冗长的箭头函数代替:

const newData = temp1.map(item => {
  return item.map(subItem => ({[subItem.dataKey]: subItem.title}))
//^^^^^^
});

实例:

const temp1 = [
      [
        {
          "title": "something",
          "dataKey": "cod"
        },
        {
          "title": "something_2",
          "dataKey": "des"
        },
        {
          "title": "something_3",
          "dataKey": "orc"
        },
        {
          "title": "something_4",
          "dataKey": "orca"
        },
        {
          "title": "something_5",
          "dataKey": "arr"
        },
        {
          "title": "something_6",
          "dataKey": "por"
        }
      ],
      [
        {
          "title": "VALUE_1",
          "dataKey": "cod"
        },
        {
          "title": "VALUE_2",
          "dataKey": "des"
        },
        {
          "title": "VALUE_3",
          "dataKey": "orc"
        },
        {
          "title": "VALUE_4",
          "dataKey": "orca"
        },
        {
          "title": "VALUE_5",
          "dataKey": "arr"
        },
        {
          "title": "VALUE_6",
          "dataKey": "por"
        }
      ]
    ];

const newData = temp1.map(item =>
  item.map(subItem => ({[subItem.dataKey]: subItem.title}))
);
console.log(newData);
© www.soinside.com 2019 - 2024. All rights reserved.