2019-04-15 描述返回两个数组中不同的元素。提示使用 b 数组创建一个 Set 对 a 数组使用 Array.prototype.filter(),仅保留 b 中不存在的值。代码 constdifference=(a,b)=>{consts=newSet(b);returna.filter(x=>!s.has(x));};示例获取 a 数组中与 b 数组中不同的元素:difference([1,2,3],[1,2,4])
2019-04-14 描述对数组中的多层嵌套进行平铺。提示需要使用递归。使用展开操作符...展开一个数组。使用 Array.prototype.concat()把空数组[]和展开的数组合并后创建一个新数组。递归展开数组中的每一个元素。代码 constdeepFlatten=arr=>[].concat(...arr.map(v=>(Array.isArray(v)?deepFlatten(v):v)));
2019-04-13 描述计算数组中指定元素出现的次数。提示使用 Array.prototype.reduce()来增加计数迭代数组中的每个元素,如果其值和指定值相等时,计数就加 1。代码 constcountOccurrences=(arr,val)=>arr.reduce((a,v)=>(v===val?a+1:a),0);示例计算数组中 1 出现的次数:countOccurrences([1,1,2,1,
2019-04-12 描述对数组元素依次传入指定函数后的返回值进行分类,并返回每种分类中的元素的个数。提示使用 Array.prototype.map()返回数组中每一个元素的属性名或指定函数的返回值。使用 Array.prototype.reduce()创建一个对象,key 为分组类型,值为该类型的元素个数。代码 constcountBy=(arr,fn)=>arr.map(typeoffn==='func
2019-04-11 描述移除数组中的假值。提示使用 Array.prototype.filter()过滤假值(false,null,0,"",undefined 和 NaN)。代码 constcompact=arr=>arr.filter(Boolean);示例返回数组中的真值:compact([0,1,false,2,'',3,'a','e'*23,NaN,'s',34]);//[1,2,3,'a','s
2019-04-10 描述根据指定的大小把一个大数组分成一些较小的数组。提示使用 Array.from()创建一个新的小数组,用于存放大数组中符合条件的元素。使用 Array.prototype.slice()将大数组中的每个元素放入到一个长度为 size 的新的小数组中。如果原始的大数组无法进行平均分配,则将剩余的元素全部放入到最后一个新的小数组中。代码 constchunk=(arr,size)=>Arra
2019-04-09 描述使用函数把集合中的元素分为两组,可通过函数来指定输入其中的元素被划分到哪一组。如果该函数返回真值,集合中的元素就属于第一组,否则就属于第二组。提示使用 Array.prototype.reduce()和 Array.prototype.push()把元素添加到不同的组中。根据集合中的每一个元素在 fn 中的返回值来进行分组。代码 constbifurcateBy=(arr,fn)=>a
2019-04-08 描述把集合里面的元素分成两组。如果 filter 中的一个元素为真值时,在集合中与之相对应的元素就划分到第一组,否则就属于第二组。提示使用 Array.prototype.reduce()和 Array.prototype.push()把集合中的元素添加到对应的分组中。filter 需和集合中的元素保持一一对应。代码 constbifurcate=(arr,filter)=>arr.redu
2019-04-07 描述把二位数组转换为使用逗号分割值(CSV)的字符串。提示使用 Array.prototype.map()和 Array.prototype.join(delimiter)把一维数组转换为使用逗号分割的字符串。使用 Array.prototype.join('\n')将二维数组中的行组合为 CSV 字符串,每一行都使用换行符作为分割。第二个参数 delimiter 可省略,默认值为,。代码 co
2019-04-06 描述如果提供的函数对集合中的任意一个元素返回 true,那么就返回 true,否则返回 false。提示使用 Array.prototype.some()进行检测,如果 fn 对集合中的任意元素返回 true,那么就返回 true。第二个参数为 fn,默认值为 Boolean。代码 `constany=(arr,fn=Boolean)=>arr.some(fn);示例检测数组中的元素是否有满足条件的:
2019-04-05 描述检测数组中的元素是否都相等。提示使用 Array.prototype.every()检测数组中的所有元素是否和第一个元素相等。代码 `constallEqual=arr=>arr.every(val=>val===arr[0]);示例检测数组中的元素是否相等:allEqual([1,2,3,4,5,6]);//falseallEqual([1,1,1,1]);//true 返回总目
2019-04-04 描述当提供的断言函数对集合中的所有元素都返回 true 时,就返回 true,否则返回 false。提示使用 Array.prototype.every()来测试集合中的所有元素在 fn 中是否返回 true。第二个参数为 fn,可使用 Boolean 作为默认值。代码 `constall=(arr,fn=Boolean)=>arr.every(fn);示例检测数组中的每一个元素是否都满足条件:all(
2019-04-03 描述创建一个函数,使其仅接受一个函数,忽略其他额外的参数。提示调用提供的方法:fn,使其只接受一个参数。代码 constunary=fn=>val=>fn(val);示例字符串数组转为整数数组:`['6','8','10'].map(unary(parseInt));//[6,8,10]` 返回总目录每天 30 秒系列之 JavaScript 代码
2019-04-02 描述传入一个参数可变的函数后返回一个闭包,该闭包接受一个数组作为参数,并且可以将参数展开后输入到一开始传入的函数中。提示使用扩展运算符展开传入的数组参数后并把其用闭包输入到 fn 中。代码 constspreadOver=fn=>argsArr=>fn(...argsArr);示例求数组中的最大值:constarrayMax=spreadOver(Math.max);arrayMax(
2019-04-01 描述创建一个函数,调用他提供的函数就可让传入的数组根据提供的索引进行排序。提示使用 Array.prototype.map()基于根据扩展运算符组合的 indexes 对传入的参数进行重新排序,以便将最终结果展开作为参数传到 fn 中。代码 constrearg=(fn,indexes)=>(...args)=>fn(...indexes.map(i=>args[i]));示例对传入的参数按
2019-03-31 描述转换异步函数使其返回 promise。提示使用柯里化返回一个函数,该函数返回一个调用原始函数的 Promise。使用扩展运算符传入所有的参数。在 Node8+ 中,你可以使用 util.promisify 代码 constpromisify=func=>(...args)=>newPromise((resolve,reject)=>func(...args,(err,result)=>(e
2019-03-30 描述从左到右依次执行传入的函数组合。提示对接受的函数参数使用扩展运算符后便可用 Array.prototype.reduce()来执行从左到右的函数组合。第一个(最左边)函数可以接受一个或多个参数,剩下的函数只能为一元函数。代码 constpipeFunctions=(...fns)=>fns.reduce((f,g)=>(...args)=>g(f(...args)));示例对参数
2019-03-29 描述为输入的异步函数进行从左到右的依次执行。提示对接受的函数参数使用扩展运算符后便可用 Array.prototype.reduce()来执行从左到右的函数组合。为接受的异步函数使用 Promise.then()。接受的函数参数可以返回以下组合:简单值,Promise,或者定义为 async 函数且通过 await 返回的异步值。所有函数必须是一元的。代码 constpipeAsyncFunc
2019-03-28 描述创建一个函数,使其可以调用提供的函数和参数进行转换。提示使用 Array.prototype.map()让传入的转换函数能够一一对应接受传入的参数。通过扩展运算符将组装好的转换函数传给 fn。代码 constoverArgs=(fn,transforms)=>(...args)=>fn(...args.map((val,i)=>transforms[i](val)));示例依次计算
2019-03-27 描述创建一个函数,该函数可以使用传入的每一个方法来接收的给定的可扩展参数作为参数执行后并返回结果。提示使用 Array.prototype.map()和 Function.prototype.apply()将传入的函数进行迭代并应使用给定的参数。代码 constover=(...fns)=>(...args)=>fns.map(fn=>fn.apply(null,args));示例获取