UNPKG

phpjs

Version:

php.js offers community built php functions in javascript

69 lines (63 loc) 1.9 kB
function array_slice(arr, offst, lgth, preserve_keys) { // discuss at: http://phpjs.org/functions/array_slice/ // original by: Brett Zamir (http://brett-zamir.me) // depends on: is_int // input by: Brett Zamir (http://brett-zamir.me) // bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // note: Relies on is_int because !isNaN accepts floats // example 1: array_slice(["a", "b", "c", "d", "e"], 2, -1); // returns 1: {0: 'c', 1: 'd'} // example 2: array_slice(["a", "b", "c", "d", "e"], 2, -1, true); // returns 2: {2: 'c', 3: 'd'} /* if ('callee' in arr && 'length' in arr) { arr = Array.prototype.slice.call(arr); } */ var key = ''; if (Object.prototype.toString.call(arr) !== '[object Array]' || (preserve_keys && offst !== 0)) { // Assoc. array as input or if required as output var lgt = 0, newAssoc = {}; for (key in arr) { //if (key !== 'length') { lgt += 1; newAssoc[key] = arr[key]; //} } arr = newAssoc; offst = (offst < 0) ? lgt + offst : offst; lgth = lgth === undefined ? lgt : (lgth < 0) ? lgt + lgth - offst : lgth; var assoc = {}; var start = false, it = -1, arrlgth = 0, no_pk_idx = 0; for (key in arr) { ++it; if (arrlgth >= lgth) { break; } if (it == offst) { start = true; } if (!start) { continue; }++arrlgth; if (this.is_int(key) && !preserve_keys) { assoc[no_pk_idx++] = arr[key]; } else { assoc[key] = arr[key]; } } //assoc.length = arrlgth; // Make as array-like object (though length will not be dynamic) return assoc; } if (lgth === undefined) { return arr.slice(offst); } else if (lgth >= 0) { return arr.slice(offst, offst + lgth); } else { return arr.slice(offst, lgth); } }