首页 > 解决方案 > 改变我的数组的结构

问题描述

我想更改结果的结构。有对象“itemGroup”,我想删除它们并保留键“fruit”和“vegetable”。

[{"id": 1, "shop": "shop1", "itemGroup": {"fruit": 2, "vegetable": 2},"total":4},
    {"id": 2, "shop": "shop2", "itemGroup": {"fruit": 0, "vegetable": 1},"total":1}]

我想要这个结果

[ 
{ "id": 1, "shop": "shop1", "fruit": 2, "vegetable": 2, "total": 4 }, 
{ "id": 2, "shop": "shop2" "fruit": 0, "vegetable": 1, "total": 1 } 
]

我的代码

var myArray = [
{shop: "shop1",item1: "my apple 1",item2: "my carrot 1"},
{shop: "shop1",item1: "my apple 1",item2: "my carrot 1"},
{shop: "shop2",item1: "my apple 0",item2: "my carrot 0"},
{shop: "shop2",item1: "my apple 0",item2: "my carrot 1"}
];

var MyArrayDefinition = [
{item: "my apple 0",color: "red", group: "fruit",score: 0},
{item: "my carrot 1",color: "orange",group: "vegetable",score: 1},
{item: "my apple 1",color: "red", group: "fruit",score: 1},
{item: "my carrot 0",color: "orange",group: "vegetable",score: 0}
];

var k = Object.keys,
items = MyArrayDefinition.reduce((o, v) => (o[v.item] = v, o), {});

var shops = myArray.reduce((o, v, i, s) => (
                s = v[k(v).find(k => k)],
                s = o[s] || (o[s] = {
                    fruit: 0,
                    vegetable: 0,
                            }),
                k(v).forEach(k => k.includes('item') &&
                    (s[(i = items[v[k]]).group] += i.score)), o), {});

            var result = k(shops).map((k, i) => ({
                id: i + 1,
                shop: k,
                itemGroup: shops[k],
                total:Object.values(shops[k]).reduce((a, b) => a + b),
            }));

标签: javascriptarraysobject

解决方案


很像你最近几天的大多数问题。:-)

您可以映射数据,使用 Object.assign 并删除 itemGroup。

let x = f.map(e => {
  e = Object.assign(e, e.itemGroup);
  delete e.itemGroup;
  return e;
})

console.log(x);
<script>
let f = [{
    "id": 1,
    "shop": "shop1",
    "itemGroup": {
      "fruit": 2,
      "vegetable": 2
    },
    "total": 4
  },
  {
    "id": 2,
    "shop": "shop2",
    "itemGroup": {
      "fruit": 0,
      "vegetable": 1
    },
    "total": 1
  }
]
</script>


推荐阅读