summaryrefslogtreecommitdiff
path: root/node_modules/locutus/php/array/array_slice.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/locutus/php/array/array_slice.js')
-rw-r--r--node_modules/locutus/php/array/array_slice.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/node_modules/locutus/php/array/array_slice.js b/node_modules/locutus/php/array/array_slice.js
new file mode 100644
index 0000000..0d90d80
--- /dev/null
+++ b/node_modules/locutus/php/array/array_slice.js
@@ -0,0 +1,74 @@
+'use strict';
+
+module.exports = function array_slice(arr, offst, lgth, preserveKeys) {
+ // eslint-disable-line camelcase
+ // discuss at: http://locutus.io/php/array_slice/
+ // original by: Brett Zamir (http://brett-zamir.me)
+ // input by: Brett Zamir (http://brett-zamir.me)
+ // bugfixed by: Kevin van Zonneveld (http://kvz.io)
+ // note 1: Relies on is_int because !isNaN accepts floats
+ // example 1: array_slice(["a", "b", "c", "d", "e"], 2, -1)
+ // returns 1: [ 'c', 'd' ]
+ // example 2: array_slice(["a", "b", "c", "d", "e"], 2, -1, true)
+ // returns 2: {2: 'c', 3: 'd'}
+
+ var isInt = require('../var/is_int');
+
+ /*
+ if ('callee' in arr && 'length' in arr) {
+ arr = Array.prototype.slice.call(arr);
+ }
+ */
+
+ var key = '';
+
+ if (Object.prototype.toString.call(arr) !== '[object Array]' || preserveKeys && offst !== 0) {
+ // Assoc. array as input or if required as output
+ var lgt = 0;
+ var newAssoc = {};
+ for (key in arr) {
+ 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;
+ var it = -1;
+ var arrlgth = 0;
+ var noPkIdx = 0;
+
+ for (key in arr) {
+ ++it;
+ if (arrlgth >= lgth) {
+ break;
+ }
+ if (it === offst) {
+ start = true;
+ }
+ if (!start) {
+ continue;
+ }++arrlgth;
+ if (isInt(key) && !preserveKeys) {
+ assoc[noPkIdx++] = arr[key];
+ } else {
+ assoc[key] = arr[key];
+ }
+ }
+ // Make as array-like object (though length will not be dynamic)
+ // assoc.length = arrlgth;
+ 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);
+ }
+};
+//# sourceMappingURL=array_slice.js.map \ No newline at end of file