function recursiveDeepClone(o) { var newO, i; if (typeof o !== 'object') { return o; } if (!o) { return o; } if ( Buffer.isBuffer(o) ) { let o2 = Buffer.alloc(o.length); o.copy(o2); return o2; } if ( o.constructor === Int8Array ) { newO = new Int8Array( o ); return newO; } if ( o.constructor === Uint8Array ) { newO = new Uint8Array( o ); return newO; } if ( o.constructor === Uint8ClampedArray ) { newO = new Uint8ClampedArray( o ); return newO; } if ( o.constructor === Int16Array ) { newO = new Int16Array( o ); return newO; } if ( o.constructor === Uint16Array ) { newO = new Uint16Array( o ); return newO; } if ( o.constructor === Int32Array ) { newO = new Int32Array( o ); return newO; } if ( o.constructor === Uint32Array ) { newO = new Uint32Array( o ); return newO; } if ( o.constructor === Float32Array ) { newO = new Float32Array( o ); return newO; } if ( o.constructor === Float64Array ) { newO = new Float64Array( o ); return newO; } if ( o.constructor === Array ) { newO = []; for (i = 0; i < o.length; i += 1) { newO[i] = recursiveDeepClone(o[i]); } return newO; } newO = {}; for (i in o) { newO[i] = recursiveDeepClone(o[i]); } return newO; }
Javascript file path format extraction
輸入一組路徑,轉換成 sprintf format
如把
'D:\\\\workspace\\path-parser\\img\\img_0005.txt'
轉換為
D:\\\\workspace\\path-parser\\img\\img_%04d.txt
基本上就是個掃目錄的蠢方法,反正成功了…演算法如下,後面附上 Javascript code
- 把輸入路徑轉換成 regex (這邊假定是索引最後一組數字字串)
- 在對應目錄下用 regex 找符合的檔名,紀錄最長和最短檔名長度
- 如果長度相同,就是有 zero padding ( e.g. %04d ),反之沒有
- 根據有沒有 zero padding 決定 format 要怎寫