왜 나는 JS 수조 중의 한 대상의 원소 값만 바꾸었는지, 다른 대상의 원소 값은 모두 따라서 변했다

3962 단어 위챗 애플릿
전달:https://blog.csdn.net/zhangxiwen_/article/details/90178819왜 나는 JS 수조 중의 한 대상의 원소 값만 바꿨고 다른 대상의 원소 값은 모두 오리지널 koko8566이 마지막으로 발표한 2019-05-13 19:14:47 읽기 수 1045 모음집에서 오늘 비교적 번잡한 다중 순환을 썼다. 그 중에서 첫 번째 순환은 수조 중의 대상 원소에 값을 부여하기 위한 것이다. 코드는 다음과 같다.
$.each(dataList, function(i,arr){
       let payArr = [];
       data.forEach(v=>{ 
            for (var key in arr){
                if('pay'+v.payNo == key&&arr[key]!= null &&arr[key]!== '0.00'){
                	v.payAmount = arr[key];
                	payArr.push(v);
                }
            }
       });
       dataList[i].payArr = payArr ; // 
});

내가 조립한 한 수조의 값을 1층 순환하는 수조의 대상에게 부여했다. 나는 분명히 순환 값을 부여했다. 그러나 매번 값을 부여한 후에 데이터 리스트에 있는 모든 대상 요소의payArr는 함께 변한다. 똑같은 것으로 변한다. 다음에 겨우 세 시간 가까이 걸렸을 때 이 문제에서 변수의 위치가 맞지 않거나 순환 방식에 문제가 있는지 생각하기 시작했고 모두forEach와 $를 바꿨다.each와 for는 결국 해결되지 않았다. 뒤에서 한 블로거가 아이디어를 제시했다. 수조는 인용 변수이기 때문에 인용 값을 부여했다. 사실은 원래의 수조이다. 즉, 내가 데이터 리스트에 부여한payArr는 항상 같은 주소에 저장된 같은 수조이기 때문에 마지막으로 payArr를 수정한 후에 인용마다 함께 고쳤다. 그러면 어떻게 해결할까?
dataList[i].payArr = JSON.parse(JSON.stringify(payArr)) ; 원리는 수조를 문자열로 변환한 다음에 대상으로 변환하는 것이다. 이렇게 하면 메모리에 새로 대상을 분배하고 문제를 해결할 수 있다. 이것은 기본적인 구덩이이다. 메우면 나와 같은 문제를 겪는 여러분에게 유용하기를 바란다. -------------판권 성명: 본고는 CSDN 블로거'koko8566'의 오리지널 글로 CC4.0 BY-SA 판권 협의에 따라 원문의 출처 링크와 본 성명을 옮겨 싣습니다.텍스트 링크:https://blog.csdn.net/zhangxiwen_/article/details/90178819

좋은 웹페이지 즐겨찾기