Show More
Commit Description:
utf8mb4
Commit Description:
utf8mb4
References:
File last commit:
Show/Diff file:
Action:
node_modules/es5-ext/array/#/concat/shim.js
| 44 lines
| 1.2 KiB
| application/javascript
| JavascriptLexer
|
r789 | "use strict"; | |||
var isPlainArray = require("../../is-plain-array") | ||||
, toPosInt = require("../../../number/to-pos-integer") | ||||
, isObject = require("../../../object/is-object") | ||||
, isConcatSpreadable = require("es6-symbol").isConcatSpreadable | ||||
, isArray = Array.isArray | ||||
, concat = Array.prototype.concat | ||||
, forEach = Array.prototype.forEach | ||||
, isSpreadable; | ||||
isSpreadable = function (value) { | ||||
if (!value) return false; | ||||
if (!isObject(value)) return false; | ||||
if (value[isConcatSpreadable] !== undefined) { | ||||
return Boolean(value[isConcatSpreadable]); | ||||
} | ||||
return isArray(value); | ||||
}; | ||||
// eslint-disable-next-line no-unused-vars | ||||
module.exports = function (item/*, …items*/) { | ||||
var result; | ||||
if (!this || !isArray(this) || isPlainArray(this)) { | ||||
return concat.apply(this, arguments); | ||||
} | ||||
result = new this.constructor(); | ||||
if (isSpreadable(this)) { | ||||
forEach.call(this, function (val, i) { result[i] = val; }); | ||||
} else { | ||||
result[0] = this; | ||||
} | ||||
forEach.call(arguments, function (arg) { | ||||
var base; | ||||
if (isSpreadable(arg)) { | ||||
base = result.length; | ||||
result.length += toPosInt(arg.length); | ||||
forEach.call(arg, function (val, i) { result[base + i] = val; }); | ||||
return; | ||||
} | ||||
result.push(arg); | ||||
}); | ||||
return result; | ||||
}; | ||||