1.匹配正整数
let isPositiveNum = val => {
return / ^ [ 1 - 9 ] d* $/ . test ( val) ;
} ;
console. log ( isPositiveNum ( 9 ) )
console. log ( isPositiveNum ( 2.2 ) )
2.匹配负整数
let isNegativeNum = val => {
return / ^ - [ 1 - 9 ] d* $/ . test ( val) ;
} ;
console. log ( isNegativeNum ( - 9 ) )
console. log ( isNegativeNum ( 2.2 ) )
3.匹配整数
let isInteger = val => {
return / ^ ( - | \+ ) ? \d+ $/ . test ( val) ;
} ;
console. log ( isInteger ( - 9 ) )
console. log ( isInteger ( 2.2 ) )
4.匹配非负浮点数
let isNotNegativeFloatNum = val => {
return / ^ \d+ ( \. \d+ ) ? $/ . test ( val) ;
} ;
console. log ( isNotNegativeFloatNum ( - 9 ) )
console. log ( isNotNegativeFloatNum ( 2.2 ) )
5.匹配由 26 个英文字母组成的字符串
let isAZaz = val => {
return / ^ [ A - Za- z] + $/ . test ( val) ;
} ;
console. log ( isAZaz ( '122a' ) )
console. log ( isAZaz ( 'abc' ) )
6.匹配由 26 个英文字母的大写组成的字符串
let isAZ = val => {
return / ^ [ A - Z ] + $/ . test ( val) ;
} ;
console. log ( isAZ ( 'Acs' ) )
console. log ( isAZ ( 'ABC' ) )
7.匹配由 26 个英文字母的小写组成的字符串
let isaz = val => {
return / ^ [ a- z] + $/ . test ( val) ;
} ;
console. log ( isaz ( 'Acs' ) )
console. log ( isaz ( 'abc' ) )
8.匹配电子邮件地址
let isEmailAddress = val => {
return / ^ [ \w- ] + ( \. [ \w- ] + ) * @[ \w- ] + ( \. [ \w- ] + ) + $/ . test ( val) || /w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/ . test ( val) ;
} ;
console. log ( isEmailAddress ( 'Acs' ) )
console. log ( isEmailAddress ( '133@qq.com' ) )
9.返回数组中的最大值
let arrayMax = arr => Math. max ( ... arr) ;
let arr = [ 1 , 2 , 3 , 5 ] ;
console. log ( arrayMax ( arr) )
10.返回数组中的最小值
let arrayMin = arr => Math. min ( ... arr) ;
let arr = [ 1 , 2 , 3 , 5 ] ;
console. log ( arrayMin ( arr) )
11.将数组块划分为指定大小的较小数组
let chunk = ( arr, size) => Array. from ( {
length: Math. ceil ( arr. length / size)
} , ( v, i) => arr. slice ( i * size, i * size + size) ) ;
let arr = [ 1 , 2 , 3 , 5 ] ;
console. log ( chunk ( arr, 2 ) )
12.从数组中移除 falsey 值
let compact = arr => arr. filter ( Boolean) ;
let arr = [ false , null , 0 , "" , undefined, NaN , 1 ]
console. log ( compact ( arr) )
13.计算数组中值的出现次数
let countOccurrences = ( arr, value) => arr. reduce ( ( a, v) => v === value ? a + 1 : a + 0 , 0 ) ;
let arr = [ 1 , 2 , 1 , 2 , 3 , 3 , 3 , 3 ] ;
console. log ( countOccurrences ( arr, 3 ) )
14.深拼合数组
let deepFlatten = arr => [ ] . concat ( ... arr. map ( v => Array. isArray ( v) ? deepFlatten ( v) : v) ) ;
let arr = [ 1 , 2 , [ 1 , 2 , [ 1 , 2 , [ 2 , 3 ] ] ] ] ;
console. log ( deepFlatten ( arr) )
15.返回两个数组之间的差异
let difference = ( a, b) => {
const s = new Set ( b) ;
return a. filter ( x => ! s. has ( x) ) ;
} ;
let arr = [ 1 , 2 , 3 ] ;
let arr2 = [ 2 , 3 , 4 ] ;
console. log ( difference ( arr, arr2) )
console. log ( difference ( arr2, arr) )
16.返回数组的所有不同值
let distinctValuesOfArray = arr => [ ... new Set ( arr) ] ;
let arr = [ 1 , 2 , 3 , 1 , 2 ] ;
console. log ( distinctValuesOfArray ( arr) )
17.返回数组中的每个第 n 个元素
let everyNth = ( arr, nth) => arr. filter ( ( e, i) => i % nth === 0 ) ;
18.筛选出数组中的非唯一值
let filterNonUnique = arr => arr. filter ( i => arr. indexOf ( i) === arr. lastIndexOf ( i) ) ;
20.拼合数组
let flatten = arr => arr. reduce ( ( a, v) => a. concat ( v) , [ ] ) ;
21.将数组向上拼合到指定深度
22.根据给定函数对数组元素进行分组
23.返回列表的头
let head = arr => arr[ 0 ] ;
24.返回除最后一个数组之外的所有元素
let initial = arr => arr. slice ( 0 , - 1 ) ;
25.初始化并填充具有指定值的数组
let initializeArrayWithRange = ( end, start = 0 ) => Array. from ( {
length: end - start
} ) . map ( ( v, i) => i + start) ;
26.初始化并填充具有指定值的数组
let initializeArrayWithValues = ( n, value = 0 ) => Array ( n) . fill ( value) ;
27.返回两个数组中存在的元素的列表
let intersection = ( a, b) => {
const s = new Set ( b) ;
return a. filter ( x => s. has ( x) ) ;
} ;
28.返回数组中的最后一个元素
let last = arr => arr[ arr. length - 1 ] ;
29.使用函数将数组的值映射到对象, 其中键值对由原始值作为键和映射值组成
let mapObject = ( arr, fn) => ( a => ( a = [ arr, arr. map ( fn) ] , a[ 0 ] . reduce ( ( acc, val, ind) => ( acc[ val] = a[ 1 ] [ ind] , acc) , { } ) ) )
( ) ;
30.nthElement: 返回数组的第 n 个元素
let nthElement = ( arr, n = 0 ) => ( n > 0 ? arr. slice ( n, n + 1 ) : arr. slice ( n) ) [ 0 ] ;