如何通过组变量更改JSON结构?

时间:2018-12-20 15:03:32

标签: javascript arrays json algorithm

我正在尝试更改JSON结构以推送到数据库

我的旧JSON:

       [
          {"name": "nameGallery"},
          {"img": "1.jpg"},
          {"img": "2.img"}
       ]

我想将“ img”变量分组为“ Images”数组,如下所示:

[
  {
    "name": "nameGallery",
    "Images": [
              {"img": "1.jpg"},
              {"img": "2.img"}
              ]
  }
]

我正在尝试使用object.assign来管理它,但我不知道为什么会出错。

function getData() {
    fetch('text/upload.json').then((res) => res.json())
    .then((data) => {
        console.log(data);
        data = data.map(o => Object.assign({}, o,
        { Images: o.Images.map(({ img }) => ({ img: img })) }
        ));
    })
}

我的结果:

enter image description here

2 个答案:

答案 0 :(得分:2)

在解决方案中,您正在调用.map,这将为您的初始数据中的每个数组条目创建一个数组条目。

如前所述,您期望结果是一个对象,而不是对象数组。因此,请看以下内容:

const data = [{
    name: 'nameGallery',
  },
  {
    img: '1.jpg',
  },
  {
    img: '2.img',
  },
];

// You want to create a new object using all the others objects
const ret = data.reduce((tmp, x) => {
  // If the key below is 'img', we push the object into 'Images'
  // void 0 means undefined
  if (x.img !== void 0) {
    tmp.Images.push(x);

    return tmp;
  }

  // If the key is not 'img'
  // We copy the keys into tmp
  return {
    ...tmp,

    ...x,
  };
}, {
  // initialize 'Images' key here it won't be undefined
  // when pushing the first data
  Images: [],
});

console.log(ret);

答案 1 :(得分:-2)

您可以尝试以下操作:

function getData() {
    fetch('text/upload.json').then((res) => res.json())
    .then((data) => {
        const name = data.find(o => !!o.name);

        return {
          name: name.name,
          Images: data.filter(o => !!o.img)
        };
    })
}