在另一个转换结构

时间:2017-12-20 15:14:03

标签: javascript

我有这个结构:

[
  [
    {
      "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});
    })
})

2 个答案:

答案 0 :(得分: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)

你真的很亲近,你只是:

  1. 忘记返回内部map的结果(在下面,我通过使用简洁的箭头函数而不是详细的函数[具有函数的函数]来实现身体[你用过的]和

  2. 已经 temp1[i]

  3. 时,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);

    直播示例:

    
    
    {{1}}