cqwcns 发表于 2019-10-6 23:00

JS splice分割数组。

用户上传的CSV其中有一列”操作类型“(DaoRuCaoZuo),JS要根据用户输入对数据进行分组。
JS首先要判断如果”操作类型“为0,就移到”删除“数组vShanChuDiZhi,在判断如果已在数据库,就移到”修改“数组vXiuGaiDiZhi。
代码功能已经实现,问题来了,不知道为什么3个数组的格式不一样(看console输出),如图,不知道什么原因,各位大佬帮忙看看,谢谢。



                        var vXieRuDiZhi = $tabDiZhiYuLanLieBiao.bootstrapTable('getData');    //获得写入数组
                        var vShanChuDiZhi = new Array();   //声明删除数组
                        var vXiuGaiDiZhi = new Array();   //声明修改数组

                        let len = vXieRuDiZhi.length;;
                        for (let i = 0; i < len; i++) {
                                if (vXieRuDiZhi['DaoRuCaoZuo'] == 0) {   //判断如果操作类型==0,就添加到删除数组,并在写入数组中删除
                                        vShanChuDiZhi.push(vXieRuDiZhi.splice(i, 1));
                                        len--;
                                        i--;
                                };   //if
                        };   //for

                       
                                $.post("/php/huodeziduanPost.php", {   //获得数据库中已有的数据
                                                vBiao: "dizhi",
                                                vZiDuan: "DiZhiID"
                                        },
                                        function (data, status) {
                                                var arrFanHui = JSON.parse(data);   //结果数组

                                                let len = vXieRuDiZhi.length;
                                                for (let i = 0; i < len; i++) {
                                                        if (jQuery.inArray(vXieRuDiZhi['DiZhiID'], arrFanHui) > 0) {    //判断如果DiZhiID在数据库已经存在,就添加到修改数组,并在写入数组中删除。
                                                                vXiuGaiDiZhi.push(vXieRuDiZhi.splice(i, 1));
                                                                len--;
                                                                i--;
                                                        };   //if
                                                };   //for
                                        });


                        //输出分类后数组
                        console.log(vXieRuDiZhi);
                        console.log(vShanChuDiZhi);
                        console.log(vXiuGaiDiZhi);


Ifover 发表于 2019-10-7 00:14

concat()         

mela997 发表于 2019-10-7 06:36

splice()方法会改变原数组的值。
所以你自己打印一下splice前后原数组的值,原数组变了,for循环里用了错误的i

cqwcns 发表于 2019-10-7 07:24

您好,要是要拆分数组,不是连接数组哦{:301_1004:}

cqwcns 发表于 2019-10-7 07:24

离不开好 发表于 2019-10-7 00:14
concat()


您好,要是要拆分数组,不是连接数组哦{:301_1004:}

cqwcns 发表于 2019-10-7 07:26

mela997 发表于 2019-10-7 06:36
splice()方法会改变原数组的值。
所以你自己打印一下splice前后原数组的值,原数组变了,for循环里用了错 ...

现在代码实现按操作类型拆分数组没有问题,分类正确。
问题是三个数组的格式不一样{:301_1004:}看输出图片效果

cqwcns 发表于 2019-10-7 07:33

拆分后3个数组的格式不一样,我想全部安装一种格式,帮我看看我的代码出了什么问题,谢谢。

cqwcns 发表于 2019-10-7 07:58

我想我大概知道问题在哪里了,splice() 方法返回值是一个数组。

定义和用法

splice() 方法用于添加或删除数组中的元素。
注意:这种方法会改变原始数组。

返回值
如果仅删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。

其实我删除的是一个对象,splice() 方法返回时会外套一个数组。
现在的问题是如何让splice() 方法不是数组,而直接返回删除的内容。各位有没有想法?谢谢。

Ifover 发表于 2019-10-7 10:05

cqwcns 发表于 2019-10-7 07:24
您好,要是要拆分数组,不是连接数组哦
你不是要[{},{}]
这样子嘛

或者直接用filter

cqwcns 发表于 2019-10-7 13:28

离不开好 发表于 2019-10-7 10:05
你不是要[{},{}]
这样子嘛



filter靠谱,谢谢{:301_986:}
页: [1]
查看完整版本: JS splice分割数组。