保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
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
'use strict';
 
var GetIntrinsic = require('get-intrinsic');
 
var $TypeError = GetIntrinsic('%TypeError%');
 
var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
 
var Call = require('./Call');
var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow');
var Get = require('./Get');
var HasProperty = require('./HasProperty');
var IsArray = require('./IsArray');
var LengthOfArrayLike = require('./LengthOfArrayLike');
var ToString = require('./ToString');
 
// https://262.ecma-international.org/11.0/#sec-flattenintoarray
 
// eslint-disable-next-line max-params
module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) {
    var mapperFunction;
    if (arguments.length > 5) {
        mapperFunction = arguments[5];
    }
 
    var targetIndex = start;
    var sourceIndex = 0;
    while (sourceIndex < sourceLen) {
        var P = ToString(sourceIndex);
        var exists = HasProperty(source, P);
        if (exists === true) {
            var element = Get(source, P);
            if (typeof mapperFunction !== 'undefined') {
                if (arguments.length <= 6) {
                    throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided');
                }
                element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]);
            }
            var shouldFlatten = false;
            if (depth > 0) {
                shouldFlatten = IsArray(element);
            }
            if (shouldFlatten) {
                var elementLen = LengthOfArrayLike(element);
                targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1);
            } else {
                if (targetIndex >= MAX_SAFE_INTEGER) {
                    throw new $TypeError('index too large');
                }
                CreateDataPropertyOrThrow(target, ToString(targetIndex), element);
                targetIndex += 1;
            }
        }
        sourceIndex += 1;
    }
 
    return targetIndex;
};