數組的深拷貝:json
一.for循環 var arr = [1,2,3,4,5] var arr2 = copyArr(arr) function copyArr(arr) { let res = [] for (let i = 0; i < arr.length; i++) { res.push(arr[i]) } return res } 二.slice 方法實現數組的深拷貝 var arr = [1,2,3,4,5] var arr2 = arr.slice(0) arr[2] = 5 console.log(arr) console.log(arr2) 三.concat 方法實現數組的深拷貝 var arr = [1,2,3,4,5] var arr2 = arr.concat() arr[2] = 5 console.log(arr) console.log(arr2) 四.ES6擴展運算符 var arr = [1,2,3,4,5] var [ ...arr2 ] = arr arr[2] = 5 console.log(arr) console.log(arr2)
對象的深度拷貝:數組
一.for循環 var obj = { name: 'FungLeo', sex: 'man', old: '18' } var obj2 = copyObj(obj) function copyObj(obj) { let res = {} for (var key in obj) { res[key] = obj[key] } return res } var copyObject = function(obj) { var result = {}; for (var x in obj) { result[x] = typeof obj === "object" ? copyObject(obj[x]) : obj[x] //若是拷貝的值仍然是一個對象,那麼重複執行當前方法。 } return result; } ~~3.14 = > 3; // ~~ 取整。~取當前數值的反碼,~~表示再次取反,也就是獲得當前自身(說明,JS中的「位」運算會將數值自動轉換爲整數) 二.轉換成json再轉換成對象實現對象的深拷貝 var obj = { name: 'FungLeo', sex: 'man', old: '18' } var obj2 = JSON.parse(JSON.stringify(obj)) 三.擴展運算符實現對象的深拷貝 var obj = { name: 'FungLeo', sex: 'man', old: '18' } var { ...obj2 } = obj obj.old = '22' console.log(obj) console.log(obj2)
數組去重:code
function dedupe(array) { return [...new Set(array)] } var arr = [1,2,2,3,3,4,4,5,5] console.log(dedupe(arr))