From 4f655e71d9a1d2bbe0eae321f11111e27c18adc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Izurieta?= Date: Sun, 5 Apr 2015 04:39:36 -0300 Subject: [PATCH 1/2] Make deepCopy work correctly with arrays --- lib/ace/lib/lang.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/ace/lib/lang.js b/lib/ace/lib/lang.js index 863bbb55..13b76f77 100644 --- a/lib/ace/lib/lang.js +++ b/lib/ace/lib/lang.js @@ -89,13 +89,24 @@ exports.deepCopy = function (obj) { return obj; var copy = cons(); - for (var key in obj) { - if (typeof obj[key] === "object") { - copy[key] = exports.deepCopy(obj[key]); - } else { - copy[key] = obj[key]; + if (Array.isArray(obj)) { + for (var key = 0; key < obj.length; key++) { + if (typeof obj[key] === "object") { + copy[key] = exports.deepCopy(obj[key]); + } else { + copy[key] = obj[key]; + } + } + } else { + for (var key in obj) { + if (typeof obj[key] === "object") { + copy[key] = exports.deepCopy(obj[key]); + } else { + copy[key] = obj[key]; + } } } + return copy; }; From 510d060cb2bea76cfb79b56d5ca2955964ae6510 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 9 Apr 2015 14:09:03 +0400 Subject: [PATCH 2/2] cleanup --- lib/ace/lib/lang.js | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/lib/ace/lib/lang.js b/lib/ace/lib/lang.js index 13b76f77..921dee1d 100644 --- a/lib/ace/lib/lang.js +++ b/lib/ace/lib/lang.js @@ -81,32 +81,25 @@ exports.copyArray = function(array){ return copy; }; -exports.deepCopy = function (obj) { +exports.deepCopy = function deepCopy(obj) { if (typeof obj !== "object" || !obj) return obj; + var copy; + if (Array.isArray(obj)) { + copy = []; + for (var key = 0; key < obj.length; key++) { + copy[key] = deepCopy(obj[key]); + } + return copy; + } var cons = obj.constructor; if (cons === RegExp) return obj; - var copy = cons(); - if (Array.isArray(obj)) { - for (var key = 0; key < obj.length; key++) { - if (typeof obj[key] === "object") { - copy[key] = exports.deepCopy(obj[key]); - } else { - copy[key] = obj[key]; - } - } - } else { - for (var key in obj) { - if (typeof obj[key] === "object") { - copy[key] = exports.deepCopy(obj[key]); - } else { - copy[key] = obj[key]; - } - } + copy = cons(); + for (var key in obj) { + copy[key] = deepCopy(obj[key]); } - return copy; };