@@ -2,6 +2,8 @@ function array_slice(arr, offst, lgth, preserve_keys) {
22 // http://kevin.vanzonneveld.net
33 // + original by: Brett Zamir
44 // - depends on: is_int
5+ // + input by: Brett Zamir
6+ // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
57 // % note: Relies on is_int because !isNaN accepts floats
68 // * example 1: array_slice(["a", "b", "c", "d", "e"], 2, -1);
79 // * returns 1: {0: 'c', 1: 'd'}
@@ -13,43 +15,45 @@ function array_slice(arr, offst, lgth, preserve_keys) {
1315 arr = Array.prototype.slice.call(arr);
1416 }
1517 */
18+
19+ var key = '' ;
1620
17- if ( ! ( arr instanceof Array ) || ( preserve_keys && offst != 0 ) ) { // Assoc. array as input or if required as output
18- var lgt = 0 , newAssoc = { } ;
19- for ( var key in arr ) {
20- //if (key !== 'length') {
21- lgt += 1 ;
22- newAssoc [ key ] = arr [ key ] ;
23- //}
24- }
25- arr = newAssoc ;
21+ if ( ! ( arr instanceof Array ) || ( preserve_keys && offst != 0 ) ) { // Assoc. array as input or if required as output
22+ var lgt = 0 , newAssoc = { } ;
23+ for ( key in arr ) {
24+ //if (key !== 'length') {
25+ lgt += 1 ;
26+ newAssoc [ key ] = arr [ key ] ;
27+ //}
28+ }
29+ arr = newAssoc ;
2630
27- offst = ( offst < 0 ) ? lgt + offst : offst ;
28- lgth = lgth == undefined ? lgt : ( lgth < 0 ) ? lgt + lgth - offst : lgth ;
31+ offst = ( offst < 0 ) ? lgt + offst : offst ;
32+ lgth = lgth == undefined ? lgt : ( lgth < 0 ) ? lgt + lgth - offst : lgth ;
2933
30- var assoc = { } ;
31- var start = false , it = - 1 , arrlgth = 0 , no_pk_idx = 0 ;
32- for ( var key in arr ) {
33- ++ it ;
34- if ( arrlgth >= lgth ) {
35- break ;
36- }
37- if ( it == offst ) {
38- start = true ;
39- }
40- if ( ! start ) {
41- continue ;
42- }
43- ++ arrlgth ;
44- if ( is_int ( key ) && ! preserve_keys ) {
34+ var assoc = { } ;
35+ var start = false , it = - 1 , arrlgth = 0 , no_pk_idx = 0 ;
36+ for ( key in arr ) {
37+ ++ it ;
38+ if ( arrlgth >= lgth ) {
39+ break ;
40+ }
41+ if ( it == offst ) {
42+ start = true ;
43+ }
44+ if ( ! start ) {
45+ continue ;
46+ }
47+ ++ arrlgth ;
48+ if ( is_int ( key ) && ! preserve_keys ) {
4549 assoc [ no_pk_idx ++ ] = arr [ key ] ;
46- } else {
47- assoc [ key ] = arr [ key ] ;
48- }
49- }
50- //assoc.length = arrlgth; // Make as array-like object (though length will not be dynamic)
51- return assoc ;
52- }
50+ } else {
51+ assoc [ key ] = arr [ key ] ;
52+ }
53+ }
54+ //assoc.length = arrlgth; // Make as array-like object (though length will not be dynamic)
55+ return assoc ;
56+ }
5357
5458 if ( lgth === undefined ) {
5559 return arr . slice ( offst ) ;
@@ -58,5 +62,4 @@ function array_slice(arr, offst, lgth, preserve_keys) {
5862 } else {
5963 return arr . slice ( offst , lgth ) ;
6064 }
61-
6265}
0 commit comments