js 分享一些简洁的处理日常工具函数。
字符串类
反转字符串
export function reverseString ( str ) {
return [ ... str] . reverse ( ) . join ( "" ) ;
}
let str = reverseString ( "hello" ) ;
console. log ( str) ;
字符串去重
export function stringFilter ( str ) {
return [ ... new Set ( Array. from ( str) ) ] . join ( "" ) ;
}
let str = stringFilter ( "apple" ) ;
console. log ( str) ;
查找给定单词,并且替换为另一词汇
export function findAndReplace ( str, wordToFind, wordToReplace ) {
return str. split ( wordToFind) . join ( wordToReplace) ;
}
let result = findAndReplace ( "I like banana" , "banana" , "apple" ) ;
console. log ( result) ;
将字符串中所有单词的首字母大写
export function capitalizeAllWords ( str ) {
return str. replace ( / \b[a-z] / g , ( char ) => char. toUpperCase ( ) ) ;
}
let str = capitalizeAllWords ( "i love reading book" ) ;
console. log ( str) ;
字符串转换为一个单词数组
export function toWords ( str, parent = / [^a-zA-Z-]+ / ) {
return str. split ( parent) . filter ( ( item ) => item) ;
}
let words = toWords ( "I want to be come a great programmer" ) ;
console. log ( words) ;
随机产生一个十六进制的值
export function getColor ( ) {
return (
"#" +
"0123456789abcdef"
. split ( "" )
. map ( ( v, i, a ) => {
return i > 5 ? null : a[ Math. floor ( Math. random ( ) * 16 ) ] ;
} )
. join ( "" )
) ;
}
console. log ( getColor ( ) ) ;
url 参数解析
export function urlParse ( url ) {
let obj = { } ;
let reg = / [?&][^?&]+=[^?&]+ / g ;
let arr = url. match ( reg) ;
if ( arr) {
arr. forEach ( ( item ) => {
let tempArr = item. substring ( 1 ) . split ( "=" ) ;
console. log ( tempArr) ;
let key = tempArr[ 0 ] ;
let val = tempArr[ 1 ] ;
obj[ key] = val;
} ) ;
}
return obj;
}
console. log ( urlParse ( "https://mp.csdn.net?id=123456&a=b" ) ) ;
字符串超出长度中间增加…切片
export function strEllipsis ( str, maxLength ) {
if ( str. length <= maxLength) return str;
const ellipsis = "..." ;
const halfLength = Math. floor ( ( maxLength - ellipsis. length) / 2 ) ;
const start = str. slice ( 0 , halfLength) ;
const end = str. slice ( str. length - halfLength) ;
return start + ellipsis + end;
}
console. log ( strEllipsis ( "abcdefg" , 5 ) ) ;
数值类
返回给定数的平均数
export function averageOf ( ... numbers) {
return numbers. reduce ( ( a, b ) => a + b, 0 ) / numbers. length;
}
let average = averageOf ( 5 , 2 , 4 , 7 ) ;
console. log ( average) ;
返回给定数的和
export function sumOf ( ... nums) {
return nums. reduce ( ( a, b ) => a + b, 0 ) ;
}
let sum = sumOf ( 5 , - 3 , 2 , 1 ) ;
console. log ( sum) ;
数字进行有效性验证
export function isValidNumber ( n ) {
return ! isNaN ( parseFloat ( n) ) && isFinite ( n) && Number ( n) === n;
}
let check = isValidNumber ( "a" ) ;
console. log ( check) ;
将 RGB 模式下的颜色转换为十六进制
export function RGBTOHex ( r, g, b ) {
return ( ( r << 16 ) + ( g << 8 ) + b) . toString ( 16 ) . padStart ( 6 , "0" ) ;
}
let hex = RGBTOHex ( 255 , 255 , 255 ) ;
console. log ( hex) ;
生成指定区间的随机整数
export function randomNum ( min, max ) {
return Math. floor ( Math. random ( ) * ( max - min) + min) ;
}
let num = randomNum ( 2 , 10 ) ;
console. log ( num) ;
斐波拉数列
export function fibonacci ( len ) {
var arr = [ ] ;
if ( isNaN ( len) || len < 0 ) {
console. log ( "输入有误" ) ;
} else {
for ( var i = 0 ; i < len; i++ ) {
if ( i === 0 || i === 1 ) {
arr[ i] = 1 ;
} else {
arr[ i] = arr[ i - 1 ] + arr[ i - 2 ] ;
}
}
}
return arr;
}
console. log ( fibonacci ( 10 ) ) ;
数组类
输出数组中所有的奇数
export function outputOdd ( arr ) {
return arr. filter ( ( number ) => number % 2 !== 0 ) ;
}
let oddNumbers = outputOdd ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ;
console. log ( oddNumbers) ;
返回一个数组的最大值
export function maxItemOfArray ( arr ) {
return Math. max ( ... arr) ;
}
let maxItem = maxItemOfArray ( [ 3 , 5 , 16 , 89 ] ) ;
console. log ( maxItem) ;
检查数组的所有项是否相等
export function areAllEqual ( arr ) {
return arr. every ( ( item ) => item === arr[ 0 ] ) ;
}
let cehek = areAllEqual ( [ 3 , 3 , 3 ] ) ;
console. log ( cehek) ;
移除数组中的 false 值,包括 false,undefined, NaN 和 empty。
export function removeFalseValues ( arr ) {
return arr. filter ( ( item ) => item) ;
}
let arr = removeFalseValues ( [ 3 , "" , false , undefined , NaN ] ) ;
console. log ( arr) ;
移除数组中的重复项
export function removeDuplicatedValues ( arr ) {
return [ ... new Set ( arr) ] ;
}
let arr = removeDuplicatedValues ( [ 5 , 3 , 2 , 5 , 6 , 1 , 1 , 6 ] ) ;
console. log ( arr) ;
数组去重(相同对象去重)
export function filterArrById ( arr ) {
let obj = { } ;
let newArr = arr. reduce ( ( cur, next ) => {
if ( next) {
obj[ next. id] ? "" : ( obj[ next. id] = true && cur. push ( next) ) ;
}
return cur;
} , [ ] ) ;
return newArr;
}
let arr = filterArrById ( [
{ id : "11" , value : 11 } ,
{ id : "11" , value : 11 } ,
{ id : "22" , value : 22 } ,
{ id : "22" , value : 22 } ,
] ) ;
console. log ( arr) ;
数组任意两个值的和是否等于 k
export function twoNumTotal ( arr, k ) {
for ( var i = 0 ; i < arr. length; i++ ) {
for ( var j = 0 ; j < i; j++ ) {
if ( arr[ i] + arr[ j] == k) {
console. log ( "两个和有这个k" ) ;
return true ;
}
}
}
console. log ( "两个和没有这个k" ) ;
return false ;
}
let result = twoNumTotal ( [ 1 , 2 , 3 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 44 , 55 ] , 6 ) ;
console. log ( result) ;
数组扁平化
export function flatten ( arr ) {
return arr. reduce (
( prev, item ) => prev. concat ( Array. isArray ( item) ? flatten ( item) : item) ,
[ ]
) ;
}
let arr = flatten ( [ 1 , [ 2 , 3 , [ 4 , 5 , 6 , [ 7 , 8 , 9 ] ] ] ] ) ;
console. log ( arr) ;
打乱数组
export function randomArray ( array = [ ] ) {
return array. sort ( ( ) => Math. random ( ) - 0.5 ) ;
}
对象类
判断对象的值是不是全为空
export function areAllValuesEmpty ( obj ) {
return Object. values ( obj) . every (
( value ) => value === null || value === undefined || value === ""
) ;
}
const result = areAllValuesEmpty ( { a : "" , b : null , c : undefined } ) ;
console. log ( result) ;
判断两个对象(包括数组)是否相等
export function isObjectEqual ( a, b ) {
let aProps = Object. getOwnPropertyNames ( a) ;
let bProps = Object. getOwnPropertyNames ( b) ;
if ( aProps. length != bProps. length) {
return false ;
}
for ( let i = 0 ; i < aProps. length; i++ ) {
let propName = aProps[ i] ;
let propA = a[ propName] ;
let propB = b[ propName] ;
if ( typeof propA === "object" ) {
if ( ! this . isObjectEqual ( propA, propB) ) {
return false ;
}
} else if ( propA !== propB) {
return false ;
}
}
return true ;
}
深拷贝, 浅拷贝
export function clonePlugin ( obj, deep ) {
if ( Array. isArray ( obj) ) {
if ( deep) {
var newArr = [ ] ;
for ( var i = 0 ; i < obj. length; i++ ) {
newArr. push ( clonePlugin ( obj[ i] , deep) ) ;
}
return newArr;
} else {
return obj. slice ( ) ;
}
} else if ( typeof obj === "object" ) {
var newObj = { } ;
for ( var prop in obj) {
if ( deep) {
newObj[ prop] = clonePlugin ( obj[ prop] , deep) ;
} else {
newObj[ prop] = obj[ prop] ;
}
}
return newObj;
} else {
return obj;
}
}
其它类
检查给定的字符串是否为有效的 JSON
export function isValidJSON ( str ) {
try {
JSON . parse ( str) ;
return true ;
} catch ( err) {
return false ;
}
}
let chech1 = isValidJSON ( '{' title':"javascript",' price':14}' ) ;
页面的底部,而你想要快速滚动到页面顶部
export function scrollToTop ( ) {
const t = document. documentElement. scrollTop || document. body. scrollTop;
if ( t > 0 ) {
window. requestAnimationFrame ( scrollToTop) ;
window. scrollTo ( 0 , t - t / 8 ) ;
}
}
返回两个日期之间的天数差
export function getDayDiff ( date1, date2 ) {
return ( date1 - date2) / ( 1000 * 3600 * 24 ) ;
}
let diff = getDayDiff ( new Date ( "2020-04-01" ) , new Date ( "2020-08-15" ) ) ;
从日期对象返回字符串时间
export function getTimeFromDate ( date ) {
return date. toTimeString ( ) . slice ( 0 , 8 ) ;
}
let time = getTimeFromDate ( new Date ( ) ) ;
阿拉伯数字转换成大写汉字
export function numberParseChina ( money ) {
var cnNums = [ "零" , "壹" , "贰" , "叁" , "肆" , "伍" , "陆" , "柒" , "捌" , "玖" ] ;
var cnIntRadice = [ "" , "拾" , "佰" , "仟" ] ;
var cnIntUnits = [ "" , "万" , "亿" , "兆" ] ;
var cnDecUnits = [ "角" , "分" , "毫" , "厘" ] ;
var cnInteger = "整" ;
var cnIntLast = "圆" ;
var maxNum = 999999999999999.9999 ;
var integerNum;
var decimalNum;
var chineseStr = "" ;
var parts;
if ( money == "" ) {
return "" ;
}
money = parseFloat ( money) ;
if ( money >= maxNum) {
return "" ;
}
if ( money == 0 ) {
chineseStr = cnNums[ 0 ] + cnIntLast + cnInteger;
return chineseStr;
}
money = money. toString ( ) ;
if ( money. indexOf ( "." ) == - 1 ) {
integerNum = money;
decimalNum = "" ;
} else {
parts = money. split ( "." ) ;
integerNum = parts[ 0 ] ;
decimalNum = parts[ 1 ] . substr ( 0 , 4 ) ;
}
if ( parseInt ( integerNum, 10 ) > 0 ) {
var zeroCount = 0 ;
var IntLen = integerNum. length;
for ( var i = 0 ; i < IntLen; i++ ) {
var n = integerNum. substr ( i, 1 ) ;
var p = IntLen - i - 1 ;
var q = p / 4 ;
var m = p % 4 ;
if ( n == "0" ) {
zeroCount++ ;
} else {
if ( zeroCount > 0 ) {
chineseStr += cnNums[ 0 ] ;
}
zeroCount = 0 ;
chineseStr += cnNums[ parseInt ( n) ] + cnIntRadice[ m] ;
}
if ( m == 0 && zeroCount < 4 ) {
chineseStr += cnIntUnits[ q] ;
}
}
chineseStr += cnIntLast;
}
if ( decimalNum != "" ) {
var decLen = decimalNum. length;
for ( var i = 0 ; i < decLen; i++ ) {
var n = decimalNum. substr ( i, 1 ) ;
if ( n != "0" ) {
chineseStr += cnNums[ Number ( n) ] + cnDecUnits[ i] ;
}
}
}
if ( chineseStr == "" ) {
chineseStr += cnNums[ 0 ] + cnIntLast + cnInteger;
} else if ( decimalNum == "" ) {
chineseStr += cnInteger;
}
return chineseStr;
}