常用js方法
- 从原始数组中提取指定字段,为每个对象添加默认值
用于处理包含很多信息的数据数组的工具,它允许你选择性地挑选出你感兴趣的信息(比如某些字段),并且可以为这些信息设置默认值。想象一下,你有一个大杂烩的数据列表,而你只关心其中的一部分内容,这个方法帮你轻松提取你需要的部分,并且能够在需要时为这些信息添加一些默认的内容
/**
* 从原始数组中提取指定字段,为每个对象添加默认值。
* @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;
});
}
使用方法:
-
- 判断一个数是否能被单个数整除
-
isDivisibleByAll(num, divisor)
-
示例:isDivisibleByAll(10, 2) 返回 true
-
- 判断一个数是否能被多个数整除
-
isDivisibleByAll(num, [divisor1, divisor2, …])
-
示例:isDivisibleByAll(12, [2, 3]) 返回 true
-
- 判断小数是否能被另一个小数整除
-
示例:isDivisibleByAll(1.2, 0.3) 返回 true
-
- 判断小数是否能被多个小数整除
-
示例:isDivisibleByAll(2.4, [0.3, 0.4]) 返回 true
-
注意事项:
- 如果传入的参数不是数字或数组,函数会返回 false
- 如果除数中包含 0 或无效值,函数会忽略它们
- 如果没有有效的除数,函数会返回 false