대화식 네트워크 응용 프로그램에 d3을 사용합니다. 상호 작용 중에 바 인딩해야하는 데이터가 변경되며 JSON 변수에서 선택된 일부 오브젝트로 구성됩니다.
JSON 변수에 map을 사용하고 적절한 개체를 선택하기위한 쿼리를 만들었습니다. 개체가 목록에 푸시되고이 목록이 새 데이터로 바인딩됩니다.
내 문제는 Javascript가 참조로 개체를 푸시합니다. d3이 멋진 데이터 수정을 수행하는 동안 JSON 변수가 지저분 해지고 쿼리가 더 이상 작동하지 않습니다.
JSON.stringify()
또는 jQuery.extend()
과 같이 각 객체를 복사해야합니까, 아니면 데이터로 전달하는 객체 배열에서 JSON 변수를 분리하는 다른 해결책이 있습니까?복제본으로서의 자바 스크립트 푸시
답변
모든 JS 객체는 참조 (객체, 배열, 함수 등)로 전달됩니다. 특정 개체의 '전체 복사본'을 만들려면 다음을 수행 할 수 있습니다.
var deepCopy = JSON.parse(JSON.stringify(oldObject)) // 1. - more of a hack
var deepCopy = _.cloneDeep(oldObject); // 2. use some predefined methods from jQuery, lodash or any other library
var shallowCopy = Object.assign({}, oldObject) // 1. - preferred (if you support new ES features)
이렇게하면 목록의 데이터가 수정되지 않습니다.
'JSON.parse (JSON.stringify (oldObject))'하지 마라. json을 실제로 사용하는 것은 해킹이므로 권장해서는 안됩니다. – WouterH
나는 해킹이 더 많음을 언급했다. –
또한'Object.assign'은 ES6 기능이기 때문에 모든 최신 브라우저에서 아직 지원되지 않는다. 예를 들어, Internet Explorer는 아직이 기능을 지원하지 않습니다. – LordTribual
- 1. 자바 스크립트 푸시
- 2. 자바 스크립트 배열 푸시
- 3. 자바 스크립트 함수 푸시 문제
- 4. 자바 스크립트 배열 푸시 기능
- 5. 콘텐츠 자바 스크립트 콘텐츠 푸시
- 6. 객체를 이미 존재하는 자바 스크립트 객체에 푸시
- 7. 배열 시작 부분에 자바 스크립트 푸시 요소
- 8. 자바 스크립트 푸시 JSON 나는이 빈 배열이
- 9. 자바 스크립트 배열 푸시 함수가 실패했습니다.
- 10. 자바 스크립트 루프 및 배열 푸시
- 11. 자바 스크립트 푸시 메서드가 작동하지 않습니다.
- 12. 푸시 - 자바 스크립트 전에 배열 업데이트
- 13. 채우기없이 값을 배열로 푸시 (자바 스크립트)
- 14. 푸시 알림이 나는 자바 스크립트 SDK를 사용하고
- 15. 동적으로 요소를 배열에 푸시 [자바 스크립트]
- 16. 자바 스크립트 푸시 기능의 동적 변수
- 17. 자바 스크립트 : 자바 스크립트
- 18. 자바 스크립트 : 자바 스크립트
- 19. gitlab 자동 푸시 스크립트
- 20. 자바 스크립트가 객체에 푸시
- 21. iOS는 자바 스크립트 다른 앱에 대한 푸시 알림 앱을 만듭니다.
- 22. 자바 스크립트 - 하나 작동하지 푸시 (StringArray.split ("") 또는 루프 밤은
- 23. 순수 자바 스크립트 앱으로 푸시 스테이트에서 북마크 허용
- 24. 자바 스크립트 푸시 오류에 CSS 텍스트 서식을 추가하는 방법은 무엇입니까?
- 25. PHP에서 json 응답을 읽고 자바 스크립트 다차원 배열로 푸시
- 26. 자바 스크립트 : for 루프를 사용하여 배열에 배열 푸시
- 27. 자바 스크립트 : 같은 인덱스에 여러 값을 푸시 배열
- 28. 커스텀 푸시 기능을 생성하기 위해 자바 스크립트 함수를 생성해야합니다.
- 29. 자바 스크립트 전역 배열에 푸시 할 수 없습니다. varible
- 30. 자바 스크립트 함수에서 자바 스크립트
[* "JavaScript에서 개체를 복제하는 가장 효율적인 방법은 무엇입니까?"] (/ q/122102)를보십시오. 'stingify()'/'parse()'를 사용하는 것은 그다지 좋지 않습니다. 이상적이지 않고 특별한주의가 필요한 몇 가지 문제가 있지만 가장 빠른 후보 일 것입니다. – altocumulus