-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathiterant-array.js
More file actions
80 lines (77 loc) · 2.94 KB
/
Copy pathiterant-array.js
File metadata and controls
80 lines (77 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright 2016 MarkLogic Corp. *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
'use strict';
module.exports = IterantArray;
const Iterant = require('./iterant');
/**
* An {@link IterantArray} extends {@link Iterant} with functionality
* specific to built-in JavaScript {@link Array} instances.
*
* @class IterantArray
* @augments Iterant
*
* @constructs IterantArray
* @function
* @param {Array} array - An {@link Array}
* @returns {IterantArray} - A new {@link IterantArray}
* @throws {TypeError} - If `array` is not an {@link Array}
*/
function IterantArray(array) {
if (!Array.isArray(array)) {
throw new TypeError('Can only wrap an Array');
}
if (!this) {
return new IterantArray(array);
}
return Iterant.call(this, array);
}
// Inherit from Iterant
IterantArray.prototype = Object.create(Iterant.prototype);
IterantArray.prototype[Symbol.toStringTag] = 'IterantArray';
/**
* Delegates to {@link Array#slice} and returns a new {@link IterantArray}.
*
* @param {number} [begin]
* @param {number} [end]
* @returns {IterantArray}
*
* @see Array#slice
*/
IterantArray.prototype.slice = function slice(begin, end) {
return IterantArray(this._iterable.slice(begin, end));
};
/**
*
*
* @param {function} mapper
* @param {object} that
* @returns {IterantArray}
*/
IterantArray.prototype.map = function(mapper, that) {
return IterantArray(this._iterable.map(mapper, that));
};
IterantArray.prototype.reduce = function(reducer, init) {
return this._iterable.reduce(reducer, init);
};
IterantArray.prototype.filter = function(predicate, that) {
return IterantArray(this._iterable.filter(predicate, that));
};
IterantArray.prototype.concat = function(...args) {
return IterantArray(this._iterable.concat(...args));
};
IterantArray.prototype.sort = function(comparator) {
return IterantArray(this._iterable.sort(comparator));
};