- Notifications
You must be signed in to change notification settings - Fork29
精心收集的有用的 JavaScript 代码片段,可以让你在 30 秒或更少的时间内理解
License
justjavac/30-seconds-of-code-zh-CN
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
精心收集的有用的 JavaScript 代码片段,可以让你在 30 秒或更少的时间内理解。
- 使用Ctrl +F 或command +F 快速搜索
- 欢迎贡献代码,再此之前请阅读contribution guide.
- 字符串换位组合(可重复)
- Average of array of numbers
- Capitalize first letter of every word
- Capitalize first letter
- Count occurrences of a value in array
- Current URL
- Curry
- Difference between arrays
- Distance between two points
- Escape regular expression
- Even or odd number
- Factorial
- Fibonacci array generator
- Filter out non-unique values in an array
- Flatten array
- et scroll position
- Greatest common divisor (GCD)
- Head of list
- Initial of list
- Initialize array with range
- Initialize array with values
- Last of list
- Measure time taken by function
- Object from key-value pairs
- Powerset
- Random number in range
- Randomize order of array
- Redirect to URL
- Reverse a string
- RGB to hexadecimal
- Scroll to top
- Similarity between arrays
- Sort characters in string (alphabetical)
- Sum of array of numbers
- Swap values of two variables
- Tail of list
- Unique values of array
- URL parameters
- UUID generator
- Validate number
比如字符串"ab"
的所有换位组合字符串是["ab", "ba"]
。而"aab"
的所有换位组合是["aab", "aba", "aab", "aba", "baa", "baa"]
(允许重复)。
使用递归。
对于给定字符串中的每个字母,为其余字母创建所有的换位组合。使用map()
把当前字母和其余字母的换位组合结合起来,然后用reduce()
把所有换位组合放到一个数组里。递归结束条件是字符串的length
属性等于2
或1
。
constanagrams=s=>{if(s.length<=2)returns.length===2 ?[s,s[1]+s[0]] :[s];returns.split('').reduce((a,l,i)=>{anagrams(s.slice(0,i)+s.slice(i+1)).map(v=>a.push(l+v));returna;},[]);}
Usereduce()
to add each value to an accumulator, initialized with a value of0
, divide by thelength
of the array.
constaverage=arr=>arr.reduce((acc,val)=>acc+val,0)/arr.length;
Usereplace()
to match the first character of each word andtoUpperCase()
to capitalize it.
constcapitalizeEveryWord=str=>str.replace(/\b[a-z]/g,char=>char.toUpperCase());
Useslice(0,1)
andtoUpperCase()
to capitalize first letter,slice(1)
to get the rest of the string.Omit thelowerRest
parameter to keep the rest of the string intact, or set it totrue
to convert to lower case.
constcapitalize=(str,lowerRest=false)=>str.slice(0,1).toUpperCase()+(lowerRest?str.slice(1).toLowerCase() :str.slice(1));
Usereduce()
to increment a counter each time you encounter the specific value inside the array.
constcountOccurrences=(arr,value)=>arr.reduce((a,v)=>v===value ?a+1 :a+0,0);
Usewindow.location.href
to get current URL.
constcurrentUrl=_=>window.location.href;
Use recursion.If the number of provided arguments (args
) is sufficient, call the passed functionf
.Otherwise return a curried functionf
that expects the rest of the arguments.
constcurry=f=>(...args)=>args.length>=f.length ?f(...args) :(...otherArgs)=>curry(f)(...args, ...otherArgs)
Usefilter()
to remove values that are part ofvalues
, determined usingincludes()
.
constdifference=(arr,values)=>arr.filter(v=>!values.includes(v));
UseMath.hypot()
to calculate the Euclidean distance between two points.
constdistance=(x0,y0,x1,y1)=>Math.hypot(x1-x0,y1-y0);
Usereplace()
to escape special characters.
constescapeRegExp=s=>s.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');}
UseMath.abs()
to extend logic to negative numbers, check using the modulo (%
) operator.Returntrue
if the number is even,false
if the number is odd.
constisEven=num=>Math.abs(num)%2===0;
Use recursion.Ifn
is less than or equal to1
, return1
.Otherwise, return the product ofn
and the factorial ofn - 1
.
constfactorial=n=>n<=1 ?1 :n*factorial(n-1)
Create an empty array of the specific length, initializing the first two values (0
and1
).Usereduce()
to add values into the array, using the sum of the last two values, except for the first two.
constfibonacci=n=>Array.apply(null,[0,1].concat(Array(n-2))).reduce((acc,val,i)=>{acc.push(i>1 ?acc[i-1]+acc[i-2] :val);returnacc;},[]);
UseArray.filter()
for an array containing only the unique values.
constunique=arr=>arr.filter(i=>arr.indexOf(i)===arr.lastIndexOf(i));// unique([1,2,2,3,4,4,5]) -> [1,3,5]
Use recursion.Usereduce()
to get all elements that are not arrays, flatten each element that is an array.
constflatten=arr=>arr.reduce((a,v)=>a.concat(Array.isArray(v) ?flatten(v) :v),[]);
UsepageXOffset
andpageYOffset
if they are defined, otherwisescrollLeft
andscrollTop
.You can omitel
to use a default value ofwindow
.
constgetScrollPos=(el=window)=>({x:(el.pageXOffset!==undefined) ?el.pageXOffset :el.scrollLeft,y:(el.pageYOffset!==undefined) ?el.pageYOffset :el.scrollTop});// getScrollPos() -> {x: 0, y: 200}
Use recursion.Base case is wheny
equals0
. In this case, returnx
.Otherwise, return the GCD ofy
and the remainder of the divisionx/y
.
constgcd=(x,y)=>!y ?x :gcd(y,x%y);
Returnarr[0]
.
consthead=arr=>arr[0];
Returnarr.slice(0,-1)
.
constinitial=arr=>arr.slice(0,-1);
UseArray(end-start)
to create an array of the desired length,map()
to fill with the desired values in a range.You can omitstart
to use a default value of0
.
constinitializeArrayRange=(end,start=0)=>Array.apply(null,Array(end-start)).map((v,i)=>i+start);
UseArray(n)
to create an array of the desired length,fill(v)
to fill it with the desired values.You can omitv
to use a default value of0
.
constinitializeArray=(n,v=0)=>Array(n).fill(v);
Returnarr.slice(-1)[0]
.
constlast=arr=>arr.slice(-1)[0];
Useperformance.now()
to get start and end time for the function,console.log()
the time taken.First argument is the function name, subsequent arguments are passed to the function.
consttimeTaken=(f,...args)=>{vart0=performance.now(),r=f(...args);console.log(performance.now()-t0);returnr;}
Usemap()
to create objects for each key-value pair, combine withObject.assign()
.
constobjectFromPairs=arr=>Object.assign(...arr.map(v=>{return{[v[0]] :v[1]};}));
Usereduce()
combined withmap()
to iterate over elements and combine into an array containing all combinations.
constpowerset=arr=>arr.reduce((a,v)=>a.concat(a.map(r=>[v].concat(r))),[[]]);
UseMath.random()
to generate a random value, map it to the desired range using multiplication.
constrandomInRange=(min,max)=>Math.random()*(max-min)+min;
Usesort()
to reorder elements, utilizingMath.random()
to randomize the sorting.
constrandomizeOrder=arr=>arr.sort((a,b)=>Math.random()>=0.5 ?-1 :1)
Usewindow.location.href
orwindow.location.replace()
to redirect tourl
.Pass a second argument to simulate a link click (true
- default) or an HTTP redirect (false
).
constredirect=(url,asLink=true)=>asLink ?window.location.href=url :window.location.replace(url);
Use array destructuring andArray.reverse()
to reverse the order of the characters in the string.Combine characters to get a string usingjoin('')
.
constreverseString=str=>[...str].reverse().join('');
Convert each value to a hexadecimal string, usingtoString(16)
, thenpadStart(2,'0')
to get a 2-digit hexadecimal value.Combine values usingjoin('')
.
constrgbToHex=(r,g,b)=>[r,g,b].map(v=>v.toString(16).padStart(2,'0')).join('');
Get distance from top usingdocument.documentElement.scrollTop
ordocument.body.scrollTop
.Scroll by a fraction of the distance from top. Usewindow.requestAnimationFrame()
to animate the scrolling.
constscrollToTop=_=>{constc=document.documentElement.scrollTop||document.body.scrollTop;if(c>0){window.requestAnimationFrame(scrollToTop);window.scrollTo(0,c-c/8);}}
Usefilter()
to remove values that are not part ofvalues
, determined usingincludes()
.
constdifference=(arr,values)=>arr.filter(v=>values.includes(v));
Split the string usingsplit('')
,sort()
utilizinglocaleCompare()
, recombine usingjoin('')
.
constsortCharactersInString=str=>str.split('').sort((a,b)=>a.localeCompare(b)).join('');
Usereduce()
to add each value to an accumulator, initialized with a value of0
.
constsum=arr=>arr.reduce((acc,val)=>acc+val,0);
Use array destructuring to swap values between two variables.
[varA,varB]=[varB,varA];
Returnarr.slice(1)
.
consttail=arr=>arr.slice(1);
Use ES6Set
and the...rest
operator to discard all duplicated values.
constunique=arr=>[...newSet(arr)];// unique([1,2,2,3,4,4,5]) -> [1,2,3,4,5]
Usematch()
with an appropriate regular expression to get all key-value pairs,map()
them appropriately.Combine all key-value pairs into a single object usingObject.assign()
and the spread operator (...
).Passlocation.search
as the argument to apply to the currenturl
.
constgetUrlParameters=url=>Object.assign(...url.match(/([^?=&]+)(=([^&]*))?/g).map(m=>{[f,v]=m.split('=');return{[f]:v}}));
Usecrypto
API to generate a UUID, compliant withRFC4122 version 4.
constuuid=_=>([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,c=>(c^crypto.getRandomValues(newUint8Array(1))[0]&15>>c/4).toString(16))
Use!isNaN
in combination withparseFloat()
to check if the argument is a number.UseisFinite()
to check if the number is finite.
constvalidateNumber=n=>!isNaN(parseFloat(n))&&isFinite(n);
Icons made bySmashicons fromwww.flaticon.com is licensed byCC 3.0 BY.
About
精心收集的有用的 JavaScript 代码片段,可以让你在 30 秒或更少的时间内理解
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Languages
- JavaScript100.0%