/**
 * components util
 */

/**
 * 清理空值，对象
 * @param children
 * @returns {*[]}
 */
// 导出一个函数，用于过滤掉空节点
export function filterEmpty (children = []) {
  // 过滤掉没有tag属性和text属性为空字符串的节点
  return children.filter(c => c.tag || (c.text && c.text.trim() !== ''))
}

/**
 * 获取字符串长度，英文字符 长度1，中文字符长度2
 * @param {*} str
 */
// 导出一个函数，用于获取字符串长度
export const getStrFullLength = (str = '') =>
  // 将字符串分割成字符数组，然后使用reduce方法遍历数组，计算每个字符的长度
  str.split('').reduce((pre, cur) => {
    // 获取字符的Unicode编码
    const charCode = cur.charCodeAt(0)
    // 如果字符的Unicode编码在0-128之间，说明是英文字符，长度为1
    if (charCode >= 0 && charCode <= 128) {
      return pre + 1
    }
    // 否则，说明是中文字符，长度为2
    return pre + 2
  }, 0)

/**
 * 截取字符串，根据 maxLength 截取后返回
 * @param {*} str
 * @param {*} maxLength
 */
// 导出一个函数，用于截取字符串
export const cutStrByFullLength = (str = '', maxLength) => {
  // 初始化显示长度为0
  let showLength = 0
  // 将字符串分割成字符数组，然后使用reduce方法遍历数组，截取字符串
  return str.split('').reduce((pre, cur) => {
    // 获取字符的Unicode编码
    const charCode = cur.charCodeAt(0)
    // 如果字符的Unicode编码在0-128之间，说明是英文字符，长度为1
    if (charCode >= 0 && charCode <= 128) {
      showLength += 1
    } else {
      // 否则，说明是中文字符，长度为2
      showLength += 2
    }
    // 如果显示长度小于等于maxLength，则将字符添加到结果中
    if (showLength <= maxLength) {
      return pre + cur
    }
    // 否则，返回结果
    return pre
  }, '')
}
