Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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将数组转换为对象数组_Javascript_Arrays_Json_Spring_Spring Boot - Fatal编程技术网

Javascript将数组转换为对象数组

Javascript将数组转换为对象数组,javascript,arrays,json,spring,spring-boot,Javascript,Arrays,Json,Spring,Spring Boot,我有一个表单,我正在使用Ajax向API提交数据。表单包含一个中继器,可帮助用户重复输入任意数量的数据。用户在几个步骤后提交表单。当我尝试将值绑定到对象时,该对象没有绑定。API是使用Spring Boot构建的,默认情况下,Jackson用于将JSON转换为对象 这是完整的代码 f.submit(function(e){ e.preventDefault(); var ignoreFields = ["_csrf"];

我有一个表单,我正在使用Ajax向API提交数据。表单包含一个中继器,可帮助用户重复输入任意数量的数据。用户在几个步骤后提交表单。当我尝试将值绑定到对象时,该对象没有绑定。API是使用Spring Boot构建的,默认情况下,Jackson用于将JSON转换为对象

这是完整的代码

f.submit(function(e){
            e.preventDefault();
            var ignoreFields = ["_csrf"];
            var unindexed_array = $(this).serializeArray().filter(val => ignoreFields.indexOf(val.name) === -1);
            var indexed_array = {};
            $.map(unindexed_array, function(n, i){
                indexed_array[n['name']] = n['value'];
            });
            $.ajax({
                  type: $(this).attr('method'), 
                  contentType: 'application/json',
                  url: $(this).attr('action'), 
                  data: JSON.stringify(indexed_array),
                  dataType: 'json', cache: false, timeout: 600000,
                  success: function (d) {
                  }, error: function (e) {
                  }
              });
        })
在JSON.stringify()之前

如果我将上面的代码转换为以下格式,我希望它能够工作,因为我使用的是一个列表,Jackson库将能够识别这种格式

    {
    endTime: "23:02",
    location: "sdasd",
    note: "sdfsdfsd sdfsdfsd",
    startTime: "03:03",
    act1:[{
       quantity: "4",
       name: "abc",
       status: "Working"
    }],
    act2:[{
       quantity: "5"
       id: "1"
    }],
    act3:[{
       quantity: "4"
       id: "2",
       unit: "mm"
    }]
}

我在Javascript中尝试了许多方法来转换为这种格式,我们如何实现上述格式?

保留一个有用函数的个人库通常可以使这种转换更容易。我已经多次使用了包含的
assocPath
hydrome
等函数,包括在a中(其中有关于它们的更多细节)

总而言之,我的解决方案涉及许多相当小的函数。我必须对您的输入结构做出一个假设,这个问题并不完全清楚,即显示的内容是真实JS格式的某种速记。如果没有,大部分代码可能仍然可以工作;转换成可用的东西可能需要额外的努力

这就是它看起来的样子:

//实用程序函数
常数关联=(属性、值、对象)=>
数字isInteger(道具)和数组isArray(obj)
? […对象切片(0,属性),值,…对象切片(属性+1)]
:{……obj[prop]:val}
常量关联路径=([p=未定义,…ps],val,obj)=>
p==未定义
? obj
:ps.length==0
? 助理(p、val、obj)
:assoc(p,assocPath(ps,val,obj[p]| |(obj[p]=Number.isInteger(ps[0])?[]:{}),obj)
常量水合物=(pvEntries)=>
reduce((a[k,v])=>assocPath(k,v,a),{})
//辅助函数
常量提取索引=s=>
拆分(/[\[\]]/)
.map(s=>/^\d+$/.test)?编号:s
.filter(n=>n!='')
const makePath=(s)=>
s.split('.').flatMap(提取索引)
//主要功能
常量转换=(输入)=>
水合物(
Object.entries(输入)
.map(([k,v])=>[makePath(k,v]))
)
//测试数据
常量输入={act1[0]。数量:“4”,“act1[0]。名称”:“abc”,“act1[0]。状态”:“工作”,“act2[0]。数量”:“5”,“act2[0]。id”:“1”,“act3[0]。数量”:“4”,“act3[0]。id”:“2”,“act3[0]。单位”:“mm”,“活动”:“ZDSD zsdsad”,“结束时间”:“23:02”,“位置”:“SDADSD”,“注意”:“SDFSD SDFSD SDFSD”,“开始时间”:“03:03”}
//演示
console.log(转换(输入))

。作为控制台包装器{max height:100%!important;top:0}
这里有点不清楚您要做什么。我不确定你的输入和输出是什么。而且这两个示例都不是对象的合法JS表示(尽管后者如果包装在
{
-
}中会是合法的JS表示)
。你想把什么转换成什么?你能给我们展示一下你的一些尝试吗?@ScottSauyet我修改了我的问题,我不知道你是否能理解,我真的不知道如何问这个问题,这是一个格式问题,你看到的后一个是我需要的格式,第一个是我拥有的格式。我如何转换文件从第一个JSON到最后一个JSON格式?如何获取该输入?它是如图所示的多行字符串吗?因为它仍然不是合法的JS格式。对象键可以包含任何字符,但在源代码或JSON中,字母数字字符/$/\以外的任何内容都是不允许的,除非包装为字符串。也就是说,这是不合法的:
{act1[0]。数量:“4”}
,但这(用字符串包装键)是合法的:
{“act1[0]。数量”:“4”}
。你救了我一天。非常感谢你。@SebrinThomas:我很高兴这对你有所帮助,但我希望你能带走的不仅仅是代码。更重要的是构建和重用许多简单函数的概念,以便构建更复杂的函数。
    {
    endTime: "23:02",
    location: "sdasd",
    note: "sdfsdfsd sdfsdfsd",
    startTime: "03:03",
    act1:[{
       quantity: "4",
       name: "abc",
       status: "Working"
    }],
    act2:[{
       quantity: "5"
       id: "1"
    }],
    act3:[{
       quantity: "4"
       id: "2",
       unit: "mm"
    }]
}