使用jquery在循环中组合两个表单值

使用jquery在循环中组合两个表单值,jquery,Jquery,嗨,伙计们,我有个棘手的问题要问 我有一个表单,当我循环位于表头中的所有表单字段时,我希望它们组合成一个数组 这是我用来获取字段所有数据的循环 $('#filterTable').find("table select, table input").each(function(key, value) { var name = $(this).attr('name'); var input = {};

嗨,伙计们,我有个棘手的问题要问

我有一个表单,当我循环位于表头中的所有表单字段时,我希望它们组合成一个数组

这是我用来获取字段所有数据的循环

$('#filterTable').find("table select, table input").each(function(key, value) {
                var name = $(this).attr('name');
                var input = {};

                if (this.value !== ''){
                     if (name === 'filter_select') {
                         input.col = $(this).data('col');
                         input.layer_id = $(this).data('layer');
                         input.filterSelect = $(this).val();
                     } else if (name === 'froms'){
                         input.col = $(this).data('col');
                         input.layer_id = $(this).data('layer');
                         input.from = $(this).val();
                     } else if (name === 'to'){
                         input.col = $(this).data('col');
                         input.layer_id = $(this).data('layer');
                         input.to = $(this).val();
                     }

                     if(layerId == "" && input)
                        layerId = input.layer_id;
                     filterForm.push(input);

                     previous_col = $(this).data('col');
                }

            });
这段代码为我提供了以下输出

0:
col: 2
layer_id: 139
from: "100"

1:
col: 2
layer_id: 139
to: "500"
我想要完成的是合并它们,因为它们具有相同的列或位于相同的表头中,所以输出将如下所示

0:
col: 2
layer_id: 139
from: "100"
to: "500"
你知道我该怎么解决这个问题吗?我被困在这里这么长时间了。谢谢

您必须使用合并

http://jsfiddle.net/jj7XZ/
或者直接看到类似的

https://stackoverflow.com/questions/22208966/merging-of-two-arrays-store-unique-elements-and-sorting-in-jquery

https://stackoverflow.com/questions/38807704/trying-to-combine-all-value-from-jquery-each-function
你有两个输入,所以

$('#filterTable').find("table select, table input").each(function...
运行两次,每个输入字段运行一次,将输入推入FilterPerform两次。你需要推一下

创建一个填充输入对象的函数,然后在完成后推送它

大概是这样的:

input.col = $('#input1').data('col');
input.layer_id = $('#input1').data('layer');
input.to = $('#input1').val();
input.from = $('#input2').val();

filterForm.push(input);

只需修改代码即可实现所需:

$('#filterTable').find("table select, table input").each(function(key, value) {
                var name = $(this).attr('name');
                var input = {};

                if (this.value !== ''){
                     if (name === 'filter_select') {
                         input.col = $(this).data('col');
                         input.layer_id = $(this).data('layer');
                         input.filterSelect = $(this).val();
                     } else if (name === 'froms'){
                         input.col = $(this).data('col');
                         input.layer_id = $(this).data('layer');
                         input.from = $(this).val();
                     } else if (name === 'to'){
                         input.col = $(this).data('col');
                         input.layer_id = $(this).data('layer');
                         input.to = $(this).val();
                     }

                     if(layerId == "" && input)
                        layerId = input.layer_id;
                     if (name === 'to')
                     {
                       var exist = filterForm.map(f => f.col).indexOf(input.col); 
                       if(exist == -1)
                       {
                         filterForm.push(input);
                       } 
                       else
                       {
                         filterForm[exist].to = $(this).val();
                       }                   

                    }
                    else
                    {
                       filterForm.push(input);
                    }


                     previous_col = $(this).data('col');
                }

            });
说明:


在将新对象推送到数组之前,我们要检查数组中是否有具有相同col属性的对象?如果否,则推送它,否则将数组中找到的对象的属性设置为

您可以使用
$.extend
组合多个具有任意属性的对象

示例代码(没有html输入,可以放入“迭代”部分)

var filterForm=[];
//输入循环的上一次迭代popuplate filterForm数组
推({
上校:2,
层id:139,
从:“100”
});
//这个迭代从输入中获取数据(为了简单/演示,这里硬编码)
变量输入={
上校:2,
层id:139,
致:“500”
};
//查找是否已在阵列中
var existing=FILTEXPERFORM.find(函数(e){
返回e.col==input.col&&e.layer\u id==input.layer\u id;
});
//更新现有项目或添加为新项目
if(现有!=null)
$.extend(现有,输入);
其他的
FilterPerform.push(输入);
console.log(filterForm)
您必须使用合并吗?你…吗?我想你的意思是“你可以使用合并”