current position:Home>The difference between shallow copy and deep copy is to use native JavaScript to realize deep copy
The difference between shallow copy and deep copy is to use native JavaScript to realize deep copy
2022-04-29 04:26:43【@huihui_ new】
Overview of light copy and deep copy :
1. Shallow copy is just a layer of copy , At the deeper object level, only references are copied ;
2. Deep copy copy copy multilayer , Every level of data is copied ;
Use native JS Implement deep copy
Native JS The data types of are Value type and Reference type :
about Value type (undefined;string;number;boolean;symbol;), You can easily use the assignment operation ,
But for the Reference type (Array,Object), Simple assignment operation , All you get from the assignment is the address , Commonly known as shallow copy , as follows :
const obj = {
a: 13,
b: {
name: 'zhangsan', age: 13 },
c: [1, 3, 4]
};
const obj2 = obj;
obj2.c[0] = 23;
console.log(obj.c[0]); //23
Yes obj2 The value modification in will also change obj The value in , Therefore, deep copy operation is required , Avoid the impact of this simple assignment operation , The code is as follows :
const obj = {
a: 13,
b: {
name: 'zhangsan', age: 13 },
c: [1, 3, 4]
};
function deepClone(obj = {
}) {
// Determine the value type
if (typeof obj !== 'object' || typeof obj == null) {
return obj
};
// initialization result value
let result;
if (obj instanceof Array) {
result = [];
} else {
result = {
};
};
// Perform assignment operation
for (let key in obj) {
// Judge key Is it right? obj Attributes contained in itself , Guarantee key Not a prototype property
if (obj.hasOwnProperty(key)) {
// recursive
result[key] = deepClone(obj[key]);
}
};
return result;
}
const obj3 = deepClone(obj);
obj3.c[0] = 23;
console.log(obj.c[0]);//1
Sum up , There are several considerations for implementing deep copy :
1. Judgment value type and application type
2. Determine whether it's an array or an object
3. recursive
copyright notice
author[@huihui_ new],Please bring the original link to reprint, thank you.
https://en.qdmana.com/2022/117/202204270551339936.html
The sidebar is recommended
- Basic usage of JavaScript
- About the problems encountered in the value transfer of react parent-child components! (Language JavaScript)
- How to realize the function of jQuery small ticket printing
- [JavaScript] handwriting a lazy loading component
- HTTP protocol
- JavaScript performance optimization
- I've taught myself Python for half a month. I feel it's useless. What should I do?
- Is it a blessing or a curse that the biggest customer of Ningde era changes ownership of Tesla?
- Element UI realizes the function of table radio selection
- Elementui realizes the function of table radio selection
guess what you like
Apache shardingsphere code formatting practice -- spotless
Vue console error information collection and reporting
Initialize the react project environment under mac
React dynamically adds elements to the list
React realizes form data collection
Vernacular react life cycle
JavaScript generates a tree
vue2. How to register and login with 0 + koa2 + mongodb
vue. JS how to realize single page application
How to realize login registration and token verification in Vue
Random recommended
- How to set the background color for individual pages in Vue cli
- How does Vue router cooperate with elementui to realize navigation
- Vue2 how to load more data on the scroll bar
- How to use margin and padding in CSS
- How does vue2x implement the vueslidershow function of the responsive adaptive rotation component plug-in
- How does vue2 recursive component implement tree menu
- How to use the three selectors of CSS
- Same blog, different styles -- hexo alternative construction
- Optimize nginx HTTPS latency - see how I can speed up nginx by 30%?
- The development model in the era of consumer Internet only transfers industrial elements from offline to online
- Advanced features of Vue
- CSS shadow advanced, to achieve a more three-dimensional shadow effect!
- Introduction to the number type method in JavaScript
- Differences between nginx forward and reverse proxy
- Front end schema form configuration generation scheme
- Units that can be used by the rotate method of transform in CSS
- Why CSS3 sticky doesn't work?
- [bug resolution] webpack error: module not found Did you mean xxx
- [bug resolution] can't perform a react state update on an unmounted component This is > a no-op, but it...
- Remember to speed up the construction of a webpack
- Browser review hover element
- Vue insert iframe
- Vue realizes downloading pictures
- Some common problem-solving methods in Vue (sort out some truly effective methods that can be used in the project) (wait for continuous update and accumulation)
- About database data response to HTML page, Chinese appears? Solution to garbled code (multiple question marks)
- Ask a question about CSS selector
- When Vue jumps the route, the timer cannot be cleared in time
- Document is not defined
- Vue quill editor stepping on pit record -- the echo style of rich text content is wrong
- The multi selection box of table in element is combined with paging to echo the bug step hole
- Vue project optimizes the loading speed of the first screen
- Use / deep / to report an error CSS (CSS selected expected)
- Nginx configuration
- Vue cli reverse proxy
- Vuex persistedstate plug-in - vuex persistent storage
- Understanding and summary of CSS
- vue2. Implementation of X data response
- JavaScript content understanding
- Props in react
- JavaScript stack“