Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript重新构造json对象_Javascript_Laravel_Javascript Objects_Laravel 8 - Fatal编程技术网

使用javascript重新构造json对象

使用javascript重新构造json对象,javascript,laravel,javascript-objects,laravel-8,Javascript,Laravel,Javascript Objects,Laravel 8,我有一个目标: [ { "_token": "lRM32nH7KAnt2xdDkUJBJYniNnANJVhG20BGnjHE", "academic[2][id]": "-1", "title[2][name]": "Test Title", "from_date[2]": "

我有一个目标:

[
    {
        "_token": "lRM32nH7KAnt2xdDkUJBJYniNnANJVhG20BGnjHE",
        "academic[2][id]": "-1",
        "title[2][name]": "Test Title",
        "from_date[2]": "2021-05-16",
        "to_date[2]": "2021-05-17",
        "institute[2]": "Titletest title test title ",
        "title[3][name]": "Test TitleTest Title",
        "from_date[3]": "2021-05-17",
        "to_date[3]": "2021-05-18",
        "institute[3]": "test title test title test title test title "
    }
]
我想将其重组为:

[
  {"title": "Test Title", "from_date": "2021-05-17", "to_date": "2021-05-18","institute":"Title"},
  {"title": "Test TitleTest Title", "from_date": "2021-05-17", "to_date": "2021-05-18","institute":"Title"},
  {"title": "Test Title", "from_date": "2021-05-17", "to_date": "2021-05-18","institute":"Title"},
]
如何使用javascript实现这一点?还是使用javascript的简单方法

编辑: 到目前为止,我所做的是:

 const data = new FormData(document.querySelector('#academic-form'));
 const result = [Object.fromEntries(data.entries())][0];

 const academics = [];
 for(var key in result){
   // console.log('key: ' + key);
   console.log('title: ' + result[key]);
   console.log(result[i]);
   academics.push({
       //push values in academics array. 
   });
    
 }

假设您是按对象键*中的数字进行分组,则可以使用正则表达式将对象键拆分为标签和数字,并在对象键/值对上使用数字作为新键创建新对象。然后可以使用从该对象创建数组

*请注意,此输出仅生成两个对象,而不是预期输出中指示的三个对象

const arr=[{
“_令牌”:“LRM32NH7KANT2XDKUJBJYNINNANJVHG20BGNJHE”,
“学术[2][id]:“-1”,
“标题[2][name]:“测试标题”,
“从日期[2]”:“2021-05-16”,
“截止日期[2]:“2021-05-17”,
“学会[2]:“职称测试职称”,
“标题[3][name]:“测试标题测试标题”,
“从日期[3]”:“2021-05-17”,
“截止日期[3]:“2021-05-18”,
“研究所[3]:“测试标题测试标题测试标题”
}];
常量正则表达式=/(标题|从|日期|到|日期|研究所)(\[\d\])/;
//在获取键和值的对象上迭代
const out=Object.entries(arr[0]).reduce((acc[key,value])=>{
//使用键上的正则表达式创建匹配数组
常量匹配=key.match(regex);
//如果有一场比赛。。。
如果(匹配){
//使用匹配项中的数字创建新的
//如果累加器对象不存在,
//并将其设置为空对象
acc[match[2]]=acc[match[2]]| |{};
//现在为该对象中的属性指定一个值
//由比赛确定(标题、截止日期等)
acc[匹配[2]][匹配[1]]=值;
}
//返回下一次迭代的累积对象
返回acc;
}, {});

log(Object.values(out))您尝试了哪些代码?您应该将其添加到您的问题中。很抱歉现在将其添加到我的问题中。@Andy现在检查一下。只需
const result=data.map(item=>({title:item['title[2][name]',}))
,然后用附加属性(类似于title)替换
title[2][name]
仅用于演示,有多个值的范围为2到10或15。那样的话怎么办?谢谢。工作得很有魅力。你能告诉我有没有不使用正则表达式的简单方法吗?我想不出一个。您需要能够识别键和区分对象(数字)的方法,这似乎是最简单的解决方案。