list.js

import identity from './identity';
import { MAX_ARRAY_LENGTH, MAX_SAFE_INTEGER, mathFloor, mathMin } from './internals/native';
import isInteger from './isInteger';
import isFinite from './isFinite';
/**
 * 调用 `iteratee` `n` 次,每次调用返回的结果存入到数组中。
 *
 * `iteratee` 调用传入一个参数 `index`。
 *
 * *注:原方法名为 `times`,自 `v1.12.0` 版本调整为 `list`。*
 *
 * @function
 * @alias module:Util.list
 * @since 1.12.0
 * @param {number} n 调用 `iteratee` 的次数。
 * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。
 * @returns {Array} 调用结果的数组。
 * @example
 *
 * list(3); // [0, 1, 2]
 *
 * list(3, String); // ['0', '1', '2']
 *
 * list(4, () => 0); // [0, 0, 0, 0]
 *
 */
const list = function (n, iteratee = identity) {
    if (n < 1 || n > MAX_SAFE_INTEGER) {
        return [];
    }
    let index = 0;
    const length = mathMin(isInteger(n) ? n : mathFloor(isFinite(n) ? n : 0), MAX_ARRAY_LENGTH);
    const result = Array(length);
    const func = typeof iteratee === 'function' ? iteratee : identity;
    while (index < length) {
        result[index] = func(index);
        index++;
    }
    return result;
};
export default list;