常用js方法

常用js方法

  1. 从原始数组中提取指定字段,为每个对象添加默认值

用于处理包含很多信息的数据数组的工具,它允许你选择性地挑选出你感兴趣的信息(比如某些字段),并且可以为这些信息设置默认值。想象一下,你有一个大杂烩的数据列表,而你只关心其中的一部分内容,这个方法帮你轻松提取你需要的部分,并且能够在需要时为这些信息添加一些默认的内容

/**
 * 从原始数组中提取指定字段,为每个对象添加默认值。
 * @param {Array} originalArray - 包含多个对象的原始数组。
 * @param {Array|string} fields - 要提取的字段,可以是数组或以逗号分隔的字符串。
 * @param {Object} defaultValue - 要为每个对象添加的默认值。
 * @returns {Array} 包含提取字段和默认值的新数组。
 */
function filterByFields(originalArray, fields, defaultValue) {
  // 如果 fields 是字符串,将其转换为数组
  if (typeof fields === 'string') {
    fields = fields.split(',').map(field => field.trim());
  }

  return originalArray.map(item => {
    
    const filteredObject = Object.keys(item).reduce((result, key) => {
      if (fields.includes(key)) {
        result[key] = item[key];
      }
      return result;
    }, {});

    Object.assign(filteredObject, defaultValue);

    return filteredObject;
  });
}

示例用法

2.格式化时间的函数

/**
 * 格式化时间。
 * @param {number|string} time - 要格式化的时间,可以是时间戳或者日期字符串,可选。
 * @param {string} format - 格式化字符串,用于指定输出的时间格式,可选,默认为'yyyy-mm-dd h:m:s'。
 * @returns {string} 格式化后的时间字符串。
 */
function formatTime(time, format) {
  let date;
  // 如果未传入时间,使用当前时间
  if (!time) {
    date = new Date();
  } else {
    // 如果传入的是时间戳,转换为日期对象
    if (typeof time === 'number') {
      date = new Date(time);
    } else {
      // 如果传入的是日期字符串,包含时间部分,使用完整的日期时间解析
      date = new Date(time);
      // 检查日期字符串是否有效
      if (isNaN(date.getTime())) {
        throw new Error('日期字符串无效');
      }
    }
  }

  // 格式化日期
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');

  // 替换格式中的占位符
  format = format || 'yyyy-mm-dd h:m:s';
  format = format.replace('yyyy', year);
  format = format.replace('mm', month);
  format = format.replace('dd', day);
  format = format.replace('h', hours);
  format = format.replace('m', minutes);
  format = format.replace('s', seconds);

  return format;
}

格式化时间的函数
3. 根据指定字段和条件筛选数组项

/**
 * 根据指定字段和条件筛选数组项。
 *
 * @param {Array} array - 要筛选的数组。
 * @param {string} field - 要用于筛选的字段名。
 * @param {Function} conditionFunction - 用于判断是否符合条件的函数。
 * @returns {Array} - 筛选后的数组。
 */
function filterByCondition(array, field, conditionFunction) {
  return array.filter(item => conditionFunction(item[field]));
}

根据指定字段和条件筛选数组项
4. 判断一个数是否能被所有指定的数整除

/**
 * 判断一个数是否能被所有指定的数整除
 * @param {number} num - 要判断的数
 * @param {number|array} divisors - 一个或多个除数,可以是单个数字或数组
 * @returns {boolean} - 如果能被所有除数整除返回 true,否则返回 false
 */
function isDivisibleByAll(num, divisors) {
    // 检查 num 是否为数字
    if (typeof num !== 'number' || isNaN(num)) {
        return false;
    }
    // 如果 divisors 不是数组,尝试将其转换为数组
    if (!Array.isArray(divisors)) {
        // 检查是否为数字且不为 NaN
        if (typeof divisors === 'number' && !isNaN(divisors)) {
            divisors = [divisors];
        } else {
            return false;
        }
    }
    // 移除 divisors 中的 NaN 和 0
    const validDivisors = divisors.filter(d => 
        typeof d === 'number' && !isNaN(d) && d !== 0
    );
    // 如果没有有效的除数,返回 false
    if (validDivisors.length === 0) {
        return false;
    }
    // 判断是否能被所有有效的除数整除
    return validDivisors.every(divisor => {
        // 处理小数的情况
        const numStr = num.toString();
        const divisorStr = divisor.toString();
        const numDecimalPlaces = numStr.includes('.') ? numStr.split('.')[1].length : 0;
        const divisorDecimalPlaces = divisorStr.includes('.') ? divisorStr.split('.')[1].length : 0;
        const maxDecimalPlaces = Math.max(numDecimalPlaces, divisorDecimalPlaces);
        const multiplier = Math.pow(10, maxDecimalPlaces);
        // 将 num 和 divisor 转换为整数进行判断
        return (num * multiplier) % (divisor * multiplier) === 0;
    });
}

使用方法:

    1. 判断一个数是否能被单个数整除
  • isDivisibleByAll(num, divisor)

  • 示例:isDivisibleByAll(10, 2) 返回 true

    1. 判断一个数是否能被多个数整除
  • isDivisibleByAll(num, [divisor1, divisor2, …])

  • 示例:isDivisibleByAll(12, [2, 3]) 返回 true

    1. 判断小数是否能被另一个小数整除
  • 示例:isDivisibleByAll(1.2, 0.3) 返回 true

    1. 判断小数是否能被多个小数整除
  • 示例:isDivisibleByAll(2.4, [0.3, 0.4]) 返回 true

  • 注意事项:

  • 如果传入的参数不是数字或数组,函数会返回 false
  • 如果除数中包含 0 或无效值,函数会忽略它们
  • 如果没有有效的除数,函数会返回 false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值