首页 > 解决方案 > 将对象数组修改为按key分组的多维数组

问题描述

我有两个布局方案和一组数据。这是原始数据:

var shape = [
  { name: "fruit", value: 'apple' },
  { name: "fruit", value: 'orange' },
  { name: "rootVegetable", value: 'turnip' },
  { name: "rootVegetable", value: 'carrot' },
  { name: "vegetable", value: 'cabbage' },
  { name: "vegetable", value: 'potato' }
];

这是我希望它看起来的样子:

var shape2 = [
  [
    { name: "fruit", value: 'apple' },
    { name: "rootVegetable", value: 'turnip' },
    { name: "vegetable", value: 'cabbage' },
  ],
  [
    { name: "fruit", value: 'orange' },
    { name: "rootVegetable", value: 'carrot' },
    { name: "vegetable", value: 'potato' },
  ]
]

然后我可以从中渲染一个表格:

| Fruit  | Root vegetable | Vegetables |
| ------ | -------------- | ---------- |
| apple  | turnip         | cabbage    |
| orange | carrot         | potato     |

我知道这是一个案例,reduce但我无法弄清楚。

标签: arraysmultidimensional-arrayreduce

解决方案


你可以试试这个。

var shape = [
    { name: "fruit", value: 'apple' },
    { name: "fruit", value: 'orange' },
    { name: "rootVegetable", value: 'turnip' },
    { name: "rootVegetable", value: 'carrot' },
    { name: "vegetable", value: 'cabbage' },
    { name: "vegetable", value: 'potato' }
];
function getResult(shape) {
    var fruits = [];
    var rootVegetable = [];
    var vegetable = [];
    var result = [];

    shape.forEach(s => {
        if (s.name == "fruit")
            fruits.push(s);
        else if (s.name == "rootVegetable")
            rootVegetable.push(s);
        else if (s.name == "vegetable")
            vegetable.push(s);
    })

    fruits.forEach((item, idx) => {
        var smallArray = [];
        smallArray.push(item)
        smallArray.push(rootVegetable[idx]);
        smallArray.push(vegetable[idx]);
        result.push(smallArray);
    })

    return result;
}

console.log(getResult(shape));


推荐阅读