<<script type="text/javascript">
/*
* 实现原理:基本数据类型,拷贝之后,修改拷贝后的数据,原数据不会受到影响;
* 实现方法: 递归,判断数据类型
*
* */
//调用对象原型上的toString,通过call绑定当前data,通过当前data调用toString
// 通过该方法可以精准的判断当前数据属于何种数据类型
function checkDataType(data) {
return Object.prototype.toString.call(data).slice(8, -1)
}
let arr = [1, 2]
console.log(checkDataType(arr)) //Array
// 递归实现深度克隆
function cloneData(data) {
let result, dataType = checkDataType(data)
// 通过dataType判断的类型,确定result的初始值
switch(dataType) {
case 'Array' :
result = []
break;
case 'Object' :
result = {}
break;
default :
return data;
break;
}
for (let i in data) {
//循环取到每个value值
let value = data[i]
if(checkDataType(value) === 'Array' || checkDataType(value) === 'Object') { //再判断数据类型
// 递归重走
result[i] = cloneData(value)
}else { //如果为基本数据类型,就直接放进新的对象或者数组
result[i] = value
}
}
return result
}
let arr1 = [1, 2, 3 ,{name:'abc',age:18}]
let arr2 = cloneData(arr1)
console.log(arr2)
arr2[3].name = '8888'
console.log(arr1, arr2)
</script>
JS实现数据的深度克隆
最新推荐文章于 2024-08-15 10:20:11 发布