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

Javascript 如何通过组变量更改JSON结构?,javascript,arrays,json,algorithm,Javascript,Arrays,Json,Algorithm,我正在尝试更改JSON结构,以便推送到我的数据库 我的旧JSON: [ {"name": "nameGallery"}, {"img": "1.jpg"}, {"img": "2.img"} ] [ { "name": "nameGallery", "Images": [ {"img": "1.jpg"}, {"img": "2.i

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

我的旧JSON:

       [
          {"name": "nameGallery"},
          {"img": "1.jpg"},
          {"img": "2.img"}
       ]
[
  {
    "name": "nameGallery",
    "Images": [
              {"img": "1.jpg"},
              {"img": "2.img"}
              ]
  }
]
我想将“img”变量分组为“Images”数组,如下所示:

       [
          {"name": "nameGallery"},
          {"img": "1.jpg"},
          {"img": "2.img"}
       ]
[
  {
    "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 })) }
        ));
    })
}
我的结果是:


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

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

const数据=[{
名称:'nameGallery',
},
{
img:'1.jpg',
},
{
img:'2.img',
},
];
//您希望使用所有其他对象创建新对象
const ret=数据减少((tmp,x)=>{
//如果下面的键是“img”,我们将对象推入“Images”
//void 0表示未定义
如果(x.img!==void 0){
tmp.Images.push(x);
返回tmp;
}
//如果钥匙不是“img”
//我们将密钥复制到tmp中
返回{
…tmp,
…x,
};
}, {
//在此处初始化“Images”键它不会被未定义
//在推送第一个数据时
图像:[],
});

控制台日志(ret)您可以尝试以下方法:

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)
        };
    })
}

您确定数据有值吗?console.log(数据)显示的是什么?@basic可能是
o.Images
这是
未定义的
。这是因为o对象中没有名为Images的属性。另一个问题是,您需要显示更真实的数据示例,以便有人为您提供更好的答案。您能否在数组中显示原始JSON,其中包含比您这里更多的信息?@asiby谢谢,下次,我会更关心真实的数据样本。非常感谢,我得到了:)