join()
用于把数组中的所有元素放入一个字符串。
元素是通过指定的分隔符进行分隔的。
Array.prototype._join = function ()
{
const separator = arguments[0] === void 0 ? "," : arguments[0]
var _this = this
var result = ""
for (var i = 0, len = _this.length; i < len; i++)
{
result += i + 1 === len ? _this[i] : _this[i] + separator
}
return result
}
slice(start, end)
Array.prototype._slice = function ()
{
var _this = this
var len = _this.length
var [_start, _end] = arguments
_start = _start !== void 0 ? _start < 0 ? _this.length - Math.abs(_start) : _start : 0
_end = _end !== void "" ? _end < 0 ? _this.length - Math.abs(_end) : _end : len
var result = []
for ( var i = _start; i < _end; i++ )
{
Array.prototype.push.call(result, _this[i])
}
return result
}
map(callback)
Array.prototype._map = function ()
{
var [handle, ...rest] = arguments
var result = []
try {
for (var i = 0, len = this.length; i < len; i++)
{
result[i] = handle(this[i], i, this)
}
}
catch (error) {
throw new Error(error)
}
finally {
return result
}
}
filter(callback)
Array.prototype._filter = function ()
{
var [handle, ...rest] = arguments
var result = []
try {
for (var i = 0,len = this.length; i < len; i++)
{
typeof handle === "function" ?
handle(this[i], i, this) && (result[result.length] = this[i]) :
this[i] instanceof handle && (result[result.length] = this[i])
}
}
catch (error) {
throw new Error(error)
}
finally {
return result
}
}
reduce(callback, initial)
Array.prototype._reduce = function ()
{
var [handle, ...rest] = arguments
var initial = rest.length ? rest[0] : this[0]
try {
for (var i = rest.length ? 0 : 1, len = this.length; i < len; i++) {
initial = handle(initial, this[i], i, this)
}
}
catch (error) {
throw new Error(error)
}
finally {
return initial
}
}
concat
用于连接两个或多个数组。
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
Array.prototype._concat = function ()
{
var args = arguments
var result = Array.prototype.slice.call(this)
var len = result.length
var _index = 0
for (var i = 0; i < args.length; i++ )
{
if (args[i] instanceof Array)
{
let _len = args[i].length
for (var s = 0; s < _len; s++)
{
result[len + s + _index + i] = args[i][s]
}
_index = _index + _len - 1
}
else
{
result[len + _index + i] = args[i]
}
}
return result
}
reverse
逆向排列数组
Array.prototype._reverse = function () {
let _this = Array.prototype.slice.call(this) || []
let _result = []
for (var _len = _this.length - 1;_len >= 0; _len--) {
Array.prototype.push.call(_result, _this[_len])
}
return _result
}