怎么返回新数组,不影响原数组呢

**pptlist是最初始的数组,不能改动它.doubt是一次次存入doubtList的,现在的问题是我使用judgment方法时,会改变pptlist,导致计算number的时候次数会重复叠加。
**


// redux.js文件:
export default function ppt(state = initialState, action) {
    const data = action.data;
    switch (action.type) {
        case SHOW_SLIDES:
        {
            const pptlist = handling(data.url_s);//处理最初始的图片数组,不要改变它
            // pptlist = [
            //     { icon: "1.png", number: 0 },
            //     { icon: "2.png", number: 0 },
            //     { icon: "3png", number: 0 },
            //     { icon: "4.png", number: 0 }
            // ];
            const list = judgment([...pptlist],[...state.doubtList]);

            return {
                ...state,
                pptlist,
                list
            }
        }
        case CHANGE_TIMES:
        {   
            const doubt = data.url; //每接收的一张图
            const doubtList = state.doubtList.concat(doubt);//我存在了数组里
            const list = judgment([...state.pptlist],[...doubtList]);
            return {
                ...state,
                doubt,
                doubtList,
                list
            } 
        }
        default:
            return state;
    }
    
}
阅读 6.3k
7 个回答

用var arr = JSON.parse(JSON.stringify(pptlist));
然后用arr来进行追加

你传参的时候不是都对数组进行拷贝了吗

将要处理的数组for遍历拷贝到一个新的数组,对比 JSON.parse(JSON.stringify(arr))性能好像相差一个数量级,如果数据不大JSON.parse(JSON.stringify(arr))也是相当方便,好吧,这是拷贝性能问题
,对于copy新数组,newArr=arr.slice()
图片描述

可以用slice返回的就是新数组。或者es6里面的...

粗暴一点的:

<script>
    var arr = [1,2,3,4];
    
    var newArr = JSON.parse(JSON.stringify(arr));
    newArr[0] = 'a';
    newArr[1] = 'b';
    newArr[2] = 'c';
    newArr[3] = 'd';
    
    console.log(arr);     // 1, 2, 3, 4
    console.log(newArr);  //a, b ,c , d
</script>

如果要完全复制,可以去看看例如jquery的克隆方法

以我的理解来说,会出现上述问题的原因在于judgment函数直接修改了参数arr1并且返回,只要先做好备份就可以避免。但是,直接修改参数是一个十分不好的行为,可以参考一下airbnb代码规范
说一些其他的问题,尽量少使用for循环,handlings函数可以不用独立出来,用一个map可以解决。在开发过程中,建议可以使用eslint工具来避免这些问题

新手上路,请多包涵

怎么做呢该。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题