UNPKG

1.68 kBJavaScriptView Raw
1'use strict';
2var $ = require('../internals/export');
3var addToUnscopables = require('../internals/add-to-unscopables');
4var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');
5var lengthOfArrayLike = require('../internals/length-of-array-like');
6var toAbsoluteIndex = require('../internals/to-absolute-index');
7var toIndexedObject = require('../internals/to-indexed-object');
8var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
9
10var $Array = Array;
11var max = Math.max;
12var min = Math.min;
13
14// `Array.prototype.toSpliced` method
15// https://tc39.es/ecma262/#sec-array.prototype.tospliced
16$({ target: 'Array', proto: true }, {
17 toSpliced: function toSpliced(start, deleteCount /* , ...items */) {
18 var O = toIndexedObject(this);
19 var len = lengthOfArrayLike(O);
20 var actualStart = toAbsoluteIndex(start, len);
21 var argumentsLength = arguments.length;
22 var k = 0;
23 var insertCount, actualDeleteCount, newLen, A;
24 if (argumentsLength === 0) {
25 insertCount = actualDeleteCount = 0;
26 } else if (argumentsLength === 1) {
27 insertCount = 0;
28 actualDeleteCount = len - actualStart;
29 } else {
30 insertCount = argumentsLength - 2;
31 actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);
32 }
33 newLen = doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);
34 A = $Array(newLen);
35
36 for (; k < actualStart; k++) A[k] = O[k];
37 for (; k < actualStart + insertCount; k++) A[k] = arguments[k - actualStart + 2];
38 for (; k < newLen; k++) A[k] = O[k + actualDeleteCount - insertCount];
39
40 return A;
41 }
42});
43
44addToUnscopables('toSpliced');