array/randomItem.js

/**
 * 随机取数组中的元素
 * @author XiaoXinYo
 * @category array
 * @alias yd_array_randomItem
 * @param {Array} array 将要抽取的数组
 * @param {number} [itemNumber=1] 抽取元素数量(默认为1)
 * @param {boolean} [repeat=false] 是否允许元素重复(默认为false)
 * @throws {Error} 所需不重复元素数量超过了数组中不重复元素的数量
 * @returns {Array} 返回抽取的元素的数组
 * @example yd_array_randomItem([1, 2, 3, 4, 5, 6], 3); //[2, 1, 3]
 */

export default (array, itemNumber = 1, repeat = false) => {
    const temp_array = [...new Set(array)];
    if (!repeat && itemNumber > temp_array.length) {
        throw new Error('所需不重复元素数量超过了数组中不重复元素的数量');
    }

    const result = [];
    for (let i = 0; i < itemNumber; i++) {
        let itemIndex = Math.floor(Math.random() * temp_array.length);
        result.push(temp_array[itemIndex]);
        if (!repeat) {
            temp_array.splice(itemIndex, 1);
        }
    }
    return result;
};