for循环往数组中添加复杂数据类型/引用型数据类型

项目场景:

提示:这里简述项目相关背景:

项目场景:jsp项目中动态添加input输入框或者其它功能组件时,获取这些动态添加的功能组件的value值


问题描述

提示:这里描述项目中遇到的问题:
通过遍历动态id或class获取值组装到声明好的Object{}中push到数组中时,所有{}的属性值都是最后一列input的value值

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
    </script>
    <script>
        var paramsList = [];
        var params = {};
        $(document).ready(function () {
            $(".btn1").click(function () {
             $(".test_1").remove();
             $(".age_1").remove();
            });

            $(".btn2").click(function () {
                for(var i=0;i<3;i++){
                    //把这个object写到循环里面或者深拷贝
                    console.log($(".test_"+i).val())
                    params['name']= $(".test_" + i).val();
                    params['age'] = $(".age_" + i).val();
                    console.log(params)
                    if(JSON.stringify(params)!="{}"){
                        // var newParams = JSON.parse(JSON.stringify(params))
                        paramsList.push(params)
                    }                  
                    console.log(paramsList)
                }
                              
            });
        });
    </script>
</head>

<body>
    <input class="test_0" type="text">
    <input class="age_0" type="text">
   
    <br>
    <input class="test_1" type="text">
    <input class="age_1" type="text">

    <br>
    <input class="test_2" type="text">
    <input class="age_2" type="text">

    <button class="btn1">删除</button>
    <button class="btn2">提交</button>
</body>

</html>

在这里插入图片描述


原因分析:

提示:这里填写问题的分析:
把params变量声明到循环外面导致push到paramsList中的始终是同一指针,那么当遍历结束时这个引用数据类型的值会被for循环的最后一组值覆盖从而导致push到paramsList中的params指针指向数据值一样打印出来的paramsList中的每一位值都一样


解决方案:

提示:这里填写该问题的具体解决方案:
可以把params声明到循环里面,或者特殊情况下深拷贝

 $(".btn2").click(function () {
  for(var i=0;i<3;i++){
        var params = {};在这里插入代码片
        //把这个object写到循环里面或者深拷贝
        console.log($(".test_"+i).val())
        params['name']= $(".test_" + i).val();
        params['age'] = $(".age_" + i).val();
        console.log(params)
        if(JSON.stringify(params)!="{}"){
            // var newParams = JSON.parse(JSON.stringify(params))//深拷贝
            paramsList.push(params)
        }                  
        console.log(paramsList)
    }
                  
});

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值