version control in this Page
version 1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var arr, obj;
init();
function init() {
arr = [1, 3, 4, [false, true, 0],
{
a: 1,
b: {
b1: 1
},
e: [
false, true, 0
]
}
];
obj = {
a: 1,
b: 2,
e: [1, true, false],
c: {
cc: false,
d: {
e: false,
f: {
f1: true
}
},
c1: [1, true, false]
}
};
testObjectCopy();
// testDeepFlatMap();
// testArrayCopy();
}
function testObjectCopy() {
var res = objectCopy(obj);
// res.b = false;
//if is true,then deep copy
// console.log(res.b !== obj.b); //true
// test object's array
// res.e[0] = true;
// console.log(res.e[0] !== obj.e[0]); //true
// res.c.d.e = '0';
// console.log(res.c.d.e !== obj.c.d.e); //true
console.log('object copy', obj, res);
}
function testArrayCopy() {
arrCopy();
}
function testDeepFlatMap() {
var res = deepFlatMap(arr);
console.log('deep flat map', arr, res);
}
// arr copy
function arrCopy(source, target) {}
// object copy
function objectCopy(source, target) {
if (!target) {
target = {};
}
for (var key in source) {
if (source[key] !== null && typeof source[key] === 'object') {
objectCopy(source[key], target[key] = {});
} else {
target[key] = source[key];
}
}
return target;
}
// deepflat map
function deepFlatMap(source, target) {
if (target === undefined) {
target = [];
}
for (var i = 0; i < source.length; i++) {
if (Array.isArray(source[i])) {
//dive in
deepFlatMap(source[i], target);
} else {
target.push(source[i]);
}
}
return target;
}
</script>
</body>
</html>