Skip to content

Commit 587fc54

Browse files
committed
improve copy() util
1 parent 506410d commit 587fc54

File tree

5 files changed

+57
-29
lines changed

5 files changed

+57
-29
lines changed

dist/uPlot.cjs.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -353,17 +353,24 @@ function fastIsObj(v) {
353353
return v != null && typeof v == 'object';
354354
}
355355

356-
function copy(o, _isObj) {
357-
_isObj = _isObj || isObj;
358-
356+
function copy(o, _isObj = isObj) {
359357
let out;
360358

361-
if (isArr(o))
362-
out = o.map(v => copy(v, _isObj));
359+
if (isArr(o)) {
360+
let val = o.find(v => v != null);
361+
362+
if (isArr(val) || _isObj(val)) {
363+
out = Array(o.length);
364+
for (let i = 0; i < o.length; i++)
365+
out[i] = copy(o[i], _isObj);
366+
}
367+
else
368+
out = o.slice();
369+
}
363370
else if (_isObj(o)) {
364371
out = {};
365-
for (var k in o)
366-
out[k] = copy(o[k], _isObj);
372+
for (let [k, v] of Object.entries(o))
373+
out[k] = copy(v, _isObj);
367374
}
368375
else
369376
out = o;

dist/uPlot.esm.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -351,17 +351,24 @@ function fastIsObj(v) {
351351
return v != null && typeof v == 'object';
352352
}
353353

354-
function copy(o, _isObj) {
355-
_isObj = _isObj || isObj;
356-
354+
function copy(o, _isObj = isObj) {
357355
let out;
358356

359-
if (isArr(o))
360-
out = o.map(v => copy(v, _isObj));
357+
if (isArr(o)) {
358+
let val = o.find(v => v != null);
359+
360+
if (isArr(val) || _isObj(val)) {
361+
out = Array(o.length);
362+
for (let i = 0; i < o.length; i++)
363+
out[i] = copy(o[i], _isObj);
364+
}
365+
else
366+
out = o.slice();
367+
}
361368
else if (_isObj(o)) {
362369
out = {};
363-
for (var k in o)
364-
out[k] = copy(o[k], _isObj);
370+
for (let [k, v] of Object.entries(o))
371+
out[k] = copy(v, _isObj);
365372
}
366373
else
367374
out = o;

dist/uPlot.iife.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -354,17 +354,24 @@ var uPlot = (function () {
354354
return v != null && typeof v == 'object';
355355
}
356356

357-
function copy(o, _isObj) {
358-
_isObj = _isObj || isObj;
359-
357+
function copy(o, _isObj = isObj) {
360358
let out;
361359

362-
if (isArr(o))
363-
out = o.map(v => copy(v, _isObj));
360+
if (isArr(o)) {
361+
let val = o.find(v => v != null);
362+
363+
if (isArr(val) || _isObj(val)) {
364+
out = Array(o.length);
365+
for (let i = 0; i < o.length; i++)
366+
out[i] = copy(o[i], _isObj);
367+
}
368+
else
369+
out = o.slice();
370+
}
364371
else if (_isObj(o)) {
365372
out = {};
366-
for (var k in o)
367-
out[k] = copy(o[k], _isObj);
373+
for (let [k, v] of Object.entries(o))
374+
out[k] = copy(v, _isObj);
368375
}
369376
else
370377
out = o;

dist/uPlot.iife.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/utils.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -342,17 +342,24 @@ export function fastIsObj(v) {
342342
return v != null && typeof v == 'object';
343343
}
344344

345-
export function copy(o, _isObj) {
346-
_isObj = _isObj || isObj;
347-
345+
export function copy(o, _isObj = isObj) {
348346
let out;
349347

350-
if (isArr(o))
351-
out = o.map(v => copy(v, _isObj));
348+
if (isArr(o)) {
349+
let val = o.find(v => v != null);
350+
351+
if (isArr(val) || _isObj(val)) {
352+
out = Array(o.length);
353+
for (let i = 0; i < o.length; i++)
354+
out[i] = copy(o[i], _isObj);
355+
}
356+
else
357+
out = o.slice();
358+
}
352359
else if (_isObj(o)) {
353360
out = {};
354-
for (var k in o)
355-
out[k] = copy(o[k], _isObj);
361+
for (let [k, v] of Object.entries(o))
362+
out[k] = copy(v, _isObj);
356363
}
357364
else
358365
out = o;

0 commit comments

Comments
 (0)