我正在尝试更改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 })) }
));
})
}
我的结果:
答案 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)
};
})
}