84 個JavaScript 代碼片段(持續(xù)更新)

JavaScript 是目前最流行的編程語言之一慌盯,正如大多數(shù)人所說:“如果你想學(xué)一門編程語言浆劲,請學(xué)JavaScript拇舀。”

FreeCodeCamp的創(chuàng)始人 Quincy Larson 在最近的一次采訪中被問到哪種語言開發(fā)人員應(yīng)該首先學(xué)習(xí)础拨。他回答:“ JavaScript∩茉兀”

“軟件正在吞噬世界诡宗,JavaScript正在吞噬軟件。JavaScript每年都在變得越來越占主導(dǎo)地位击儡,而且沒人知道最終會取代它的是什么塔沃。"

如果您沒有充分的理由學(xué)習(xí)一種新語言(例如您的工作要求您維護(hù)非JavaScript代碼庫),那么我的建議是著重于提高JavaScript的水平曙痘》急”

聽我說這么多,你是不是很激動呢边坤。這里有127個常用的JS代碼片段名扛,方便你學(xué)習(xí)和使用。

1茧痒、all

如果數(shù)組所有元素滿足函數(shù)條件肮韧,則返回true。調(diào)用時,如果省略第二個參數(shù)弄企,則默認(rèn)傳遞布爾值超燃。

constall=(arr,fn=Boolean)=>arr.every(fn);

all([4,2,3],x=>x>1);// true

all([1,2,3]);// true

2、allEqual

判斷數(shù)組中的元素是否都相等

constallEqual=arr=>arr.every(val=>val===arr[0]);

allEqual([1,2,3,4,5,6]);// false

allEqual([1,1,1,1]);// true

3拘领、approximatelyEqual

此代碼示例檢查兩個數(shù)字是否近似相等意乓,差異值可以通過傳參的形式進(jìn)行設(shè)置

constapproximatelyEqual=(v1,v2,epsilon=0.001)=>Math.abs(v1-v2)<epsilon;

approximatelyEqual(Math.PI/2.0,1.5708);// true

4、arrayToCSV

此段代碼將沒有逗號或雙引號的元素轉(zhuǎn)換成帶有逗號分隔符的字符串即CSV格式識別的形式约素。

constarrayToCSV=(arr,delimiter=',')=>

arr.map(v=>v.map(x=>`"${x}"`).join(delimiter)).join('\n');

arrayToCSV([['a','b'],['c','d']]);// '"a","b"\n"c","d"'

arrayToCSV([['a','b'],['c','d']],';');// '"a";"b"\n"c";"d"'

5届良、arrayToHtmlList

此段代碼將數(shù)組元素轉(zhuǎn)換成<li>標(biāo)記,并將此元素添加至給定的ID元素標(biāo)記內(nèi)圣猎。

constarrayToHtmlList=(arr,listID)=>(el=>(

????(el=document.querySelector('#'+listID)),

????(el.innerHTML+=arr.map(item=>`<li>${item}</li>`).join(''))

))();

arrayToHtmlList(['item 1','item 2'],'myListID');

6士葫、attempt

此段代碼執(zhí)行一個函數(shù),將剩余的參數(shù)傳回函數(shù)當(dāng)參數(shù)送悔,返回相應(yīng)的結(jié)果慢显,并能捕獲異常。

constattempt=(fn,...args)=>{

????try{

????????returnfn(...args);

????}catch(e){

????????returneinstanceofError?e:newError(e);

????}

};

varelements=attempt(function(selector){

returndocument.querySelectorAll(selector);

},'>_>');

if(elementsinstanceofError)elements=[];// elements = []

7欠啤、average

此段代碼返回兩個或多個數(shù)的平均數(shù)荚藻。

constaverage=(...nums)=>nums.reduce((acc,val)=>acc+val,0)/nums.length;

average(...[1,2,3]);// 2

average(1,2,3);// 2

8、averageBy

一個 map()函數(shù)和 reduce()函數(shù)結(jié)合的例子跪妥,此函數(shù)先通過 map() 函數(shù)將對象轉(zhuǎn)換成數(shù)組鞋喇,然后在調(diào)用reduce()函數(shù)進(jìn)行累加,然后根據(jù)數(shù)組長度返回平均值眉撵。

constaverageBy=(arr,fn)=>

arr.map(typeoffn==='function'?fn:val=>val[fn]).reduce((acc,val)=>acc+val,0)/

arr.length;

averageBy([{n:4},{n:2},{n:8},{n:6}],o=>o.n);// 5

averageBy([{n:4},{n:2},{n:8},{n:6}],'n');// 5

9侦香、bifurcate

此函數(shù)包含兩個參數(shù),類型都為數(shù)組纽疟,依據(jù)第二個參數(shù)的真假條件罐韩,將一個參數(shù)的數(shù)組進(jìn)行分組,條件為真的放入第一個數(shù)組污朽,其它的放入第二個數(shù)組散吵。這里運(yùn)用了Array.prototype.reduce() 和 Array.prototype.push() 相結(jié)合的形式。

constbifurcate=(arr,filter)=>

arr.reduce((acc,val,i)=>(acc[filter[i]?0:1].push(val),acc),[[],[]]);

bifurcate(['beep','boop','foo','bar'],[true,true,false,true]);

// [ ['beep', 'boop', 'bar'], ['foo'] ]

10蟆肆、bifurcateBy

此段代碼將數(shù)組按照指定的函數(shù)邏輯進(jìn)行分組矾睦,滿足函數(shù)條件的邏輯為真,放入第一個數(shù)組中炎功,其它不滿足的放入第二個數(shù)組 枚冗。這里運(yùn)用了Array.prototype.reduce() 和 Array.prototype.push() 相結(jié)合的形式,基于函數(shù)過濾邏輯蛇损,通過 Array.prototype.push() 函數(shù)將其添加到數(shù)組中赁温。

constbifurcateBy=(arr,fn)=>

arr.reduce((acc,val,i)=>(acc[fn(val,i)?0:1].push(val),acc),[[],[]]);

bifurcateBy(['beep','boop','foo','bar'],x=>x[0]==='b');

// [ ['beep', 'boop', 'bar'], ['foo'] ]

11坛怪、bottomVisible

用于檢測頁面是否滾動到頁面底部。

constbottomVisible=()=>

document.documentElement.clientHeight+window.scrollY>=

(document.documentElement.scrollHeight||document.documentElement.clientHeight);

bottomVisible();// true

12股囊、byteSize

此代碼返回字符串的字節(jié)長度袜匿。這里用到了Blob對象,Blob(Binary Large Object)對象代表了一段二進(jìn)制數(shù)據(jù)稚疹,提供了一系列操作接口居灯。其他操作二進(jìn)制數(shù)據(jù)的API(比如File對象),都是建立在Blob對象基礎(chǔ)上的内狗,繼承了它的屬性和方法穆壕。生成Blob對象有兩種方法:一種是使用Blob構(gòu)造函數(shù),另一種是對現(xiàn)有的Blob對象使用slice方法切出一部分其屏。

constbyteSize=str=>newBlob([str]).size;

byteSize('??');// 4

byteSize('Hello World');// 11

13、capitalize

將字符串的首字母轉(zhuǎn)成大寫,這里主要運(yùn)用到了ES6的展開語法在數(shù)組中的運(yùn)用缨该。

constcapitalize=([first,...rest])=>

first.toUpperCase()+rest.join('');

capitalize('fooBar');// 'FooBar'

capitalize('fooBar',true);// 'FooBar'

14偎行、capitalizeEveryWord

將一個句子中每個單詞首字母轉(zhuǎn)換成大寫字母,這里中要運(yùn)用了正則表達(dá)式進(jìn)行替換贰拿。

constcapitalizeEveryWord=str=>str.replace(/\b[a-z]/g,char=>char.toUpperCase());

capitalizeEveryWord('hello world!');// 'Hello World!'

15蛤袒、castArray

此段代碼將非數(shù)值的值轉(zhuǎn)換成數(shù)組對象。

constcastArray=val=>(Array.isArray(val)?val:[val]);

castArray('foo');// ['foo']

castArray([1]);// [1]

16膨更、compact

將數(shù)組中移除值為 false 的內(nèi)容妙真。

constcompact=arr=>arr.filter(Boolean);

compact([0,1,false,2,'',3,'a','e'*23,NaN,'s',34]);

// [ 1, 2, 3, 'a', 's', 34 ]

17、countOccurrences

統(tǒng)計數(shù)組中某個值出現(xiàn)的次數(shù)

constcountOccurrences=(arr,val)=>arr.reduce((a,v)=>(v===val?a+1:a),0);

countOccurrences([1,1,2,1,2,3],1);// 3

18荚守、Create Directory

此代碼段使用 existSync() 檢查目錄是否存在珍德,然后使用 mkdirSync() 創(chuàng)建目錄(如果不存在)。

constfs=require('fs');

constcreateDirIfNotExists=dir=>(!fs.existsSync(dir)?fs.mkdirSync(dir):undefined);

createDirIfNotExists('test');

// creates the directory 'test', if it doesn't exist

19矗漾、currentURL

返回當(dāng)前訪問的 URL 地址锈候。

constcurrentURL=()=>window.location.href;

currentURL();// 'https://medium.com/@fatosmorina'

20、dayOfYear

返回當(dāng)前是今年的第幾天

constdayOfYear=date=>

Math.floor((date-newDate(date.getFullYear(),0,0))/1000/60/60/24);

dayOfYear(newDate());// 272

21敞贡、decapitalize

將字符串的首字母轉(zhuǎn)換成小寫字母

constdecapitalize=([first,...rest])=>

first.toLowerCase()+rest.join('')

decapitalize('FooBar');// 'fooBar'


22泵琳、deepFlatten

通過遞歸的形式,將多維數(shù)組展平成一維數(shù)組誊役。

constdeepFlatten=arr=>[].concat(...arr.map(v=>(Array.isArray(v)?deepFlatten(v):v)));

deepFlatten([1,[2],[[3],4],5]);// [1,2,3,4,5]

23获列、default

去重對象的屬性,如果對象中含有重復(fù)的屬性蛔垢,以前面的為準(zhǔn)击孩。

constdefaults=(obj,...defs)=>Object.assign({},obj,...defs.reverse(),obj);

defaults({a:1},{b:2},{b:6},{a:3});// { a: 1, b: 2 }

24、defer

延遲函數(shù)的調(diào)用啦桌,即異步調(diào)用函數(shù)溯壶。

constdefer=(fn,...args)=>setTimeout(fn,1,...args);

defer(console.log,'a'),console.log('b');// logs 'b' then 'a'

25及皂、degreesToRads

此段代碼將標(biāo)準(zhǔn)的度數(shù),轉(zhuǎn)換成弧度且改。

constdegreesToRads=deg=>(deg*Math.PI)/180.0;

degreesToRads(90.0);// ~1.5708

26验烧、difference

此段代碼查找兩個給定數(shù)組的差異,查找出前者數(shù)組在后者數(shù)組中不存在元素又跛。

constdifference=(a,b)=>{

consts=newSet(b);

returna.filter(x=>!s.has(x));

};

difference([1,2,3],[1,2,4]);// [3]

27碍拆、differenceBy

通過給定的函數(shù)來處理需要對比差異的數(shù)組,查找出前者數(shù)組在后者數(shù)組中不存在元素慨蓝。

constdifferenceBy=(a,b,fn)=>{

consts=newSet(b.map(fn));

returna.filter(x=>!s.has(fn(x)));

};

differenceBy([2.1,1.2],[2.3,3.4],Math.floor);// [1.2]

differenceBy([{x:2},{x:1}],[{x:1}],v=>v.x);// [ { x: 2 } ]

28感混、differenceWith

此段代碼按照給定函數(shù)邏輯篩選需要對比差異的數(shù)組,查找出前者數(shù)組在后者數(shù)組中不存在元素礼烈。

constdifferenceWith=(arr,val,comp)=>arr.filter(a=>val.findIndex(b=>comp(a,b))===-1);

differenceWith([1,1.2,1.5,3,0],[1.9,3,0],(a,b)=>Math.round(a)===Math.round(b));

// [1, 1.2]

29弧满、digitize

將輸入的數(shù)字拆分成單個數(shù)字組成的數(shù)組。

constdigitize=n=>[...`${n}`].map(i=>parseInt(i));

digitize(431);// [4, 3, 1]

30此熬、distance

計算兩點(diǎn)之間的距離

constdistance=(x0,y0,x1,y1)=>Math.hypot(x1-x0,y1-y0);

distance(1,1,2,3);// 2.23606797749979

31庭呜、drop

此段代碼將給定的數(shù)組從左邊開始刪除 n 個元素

constdrop=(arr,n=1)=>arr.slice(n);

drop([1,2,3]);// [2,3]

drop([1,2,3],2);// [3]

drop([1,2,3],42);// []

32、dropRight

此段代碼將給定的數(shù)組從右邊開始刪除 n 個元素

constdropRight=(arr,n=1)=>arr.slice(0,-n);

dropRight([1,2,3]);// [1,2]

dropRight([1,2,3],2);// [1]

dropRight([1,2,3],42);// []

33犀忱、dropRightWhile

此段代碼將給定的數(shù)組按照給定的函數(shù)條件從右開始刪除募谎,直到當(dāng)前元素滿足函數(shù)條件為True時,停止刪除阴汇,并返回數(shù)組剩余元素数冬。

constdropRightWhile=(arr,func)=>{

while(arr.length>0&&!func(arr[arr.length-1]))arr=arr.slice(0,-1);

returnarr;

};

dropRightWhile([1,2,3,4],n=>n<3);// [1, 2]

34、dropWhile

按照給定的函數(shù)條件篩選數(shù)組搀庶,不滿足函數(shù)條件的將從數(shù)組中移除拐纱。

constdropWhile=(arr,func)=>{

while(arr.length>0&&!func(arr[0]))arr=arr.slice(1);

returnarr;

};

dropWhile([1,2,3,4],n=>n>=3);// [3,4]

35、elementContains

接收兩個DOM元素對象參數(shù)地来,判斷后者是否是前者的子元素戳玫。

constelementContains=(parent,child)=>parent!==child&&parent.contains(child);

elementContains(document.querySelector('head'),document.querySelector('title'));// true

elementContains(document.querySelector('body'),document.querySelector('body'));// false

36、filterNonUnique

移除數(shù)組中重復(fù)的元素

constfilterNonUnique=arr=>[…newSet(arr)];

filterNonUnique([1,2,2,3,4,4,5]);// [1, 2, 3, 4, 5]

37未斑、findKey

按照給定的函數(shù)條件咕宿,查找第一個滿足條件對象的鍵值。

constfindKey=(obj,fn)=>Object.keys(obj).find(key=>fn(obj[key],key,obj));

findKey(

{

barney:{age:36,active:true},

fred:{age:40,active:false},

pebbles:{age:1,active:true}

},

o=>o['active']

);// 'barney'

38蜡秽、findLast

按照給定的函數(shù)條件篩選數(shù)組府阀,將最后一個滿足條件的元素進(jìn)行刪除。

constfindLast=(arr,fn)=>arr.filter(fn).pop();

findLast([1,2,3,4],n=>n%2===1);// 3

39芽突、flatten

按照指定數(shù)組的深度试浙,將嵌套數(shù)組進(jìn)行展平。

constflatten=(arr,depth=1)=>

arr.reduce((a,v)=>a.concat(depth>1&&Array.isArray(v)?flatten(v,depth-1):v),[]);

flatten([1,[2],3,4]);// [1, 2, 3, 4]

flatten([1,[2,[3,[4,5],6],7],8],2);// [1, 2, 3, [4, 5], 6, 7, 8]

40寞蚌、forEachRight

按照給定的函數(shù)條件田巴,從數(shù)組的右邊往左依次進(jìn)行執(zhí)行钠糊。

constforEachRight=(arr,callback)=>

arr

.slice(0)

.reverse()

.forEach(callback);

forEachRight([1,2,3,4],val=>console.log(val));// '4', '3', '2', '1'

41、forOwn

此段代碼按照給定的函數(shù)條件壹哺,進(jìn)行迭代對象抄伍。

constforOwn=(obj,fn)=>Object.keys(obj).forEach(key=>fn(obj[key],key,obj));

forOwn({foo:'bar',a:1},v=>console.log(v));// 'bar', 1

42、functionName

此段代碼輸出函數(shù)的名稱管宵。

constfunctionName=fn=>(console.debug(fn.name),fn);

functionName(Math.max);// max (logged in debug channel of console)

43截珍、getColonTimeFromDate

此段代碼從Date對象里獲取當(dāng)前時間。

constgetColonTimeFromDate=date=>date.toTimeString().slice(0,8);

getColonTimeFromDate(newDate());// "08:38:00"

44箩朴、getDaysDiffBetweenDates

此段代碼返回兩個日期之間相差多少天

constgetDaysDiffBetweenDates=(dateInitial,dateFinal)=>

(dateFinal-dateInitial)/(1000*3600*24);

getDaysDiffBetweenDates(newDate('2019-01-13'),newDate('2019-01-15'));// 2

45岗喉、getStyle

此代碼返回DOM元素節(jié)點(diǎn)對應(yīng)的屬性值。

constgetStyle=(el,ruleName)=>getComputedStyle(el)[ruleName];

getStyle(document.querySelector('p'),'font-size');// '16px'

46炸庞、getType

此段代碼的主要功能就是返回數(shù)據(jù)的類型钱床。

constgetType=v=>

v===undefined?'undefined':v===null?'null':v.constructor.name.toLowerCase();

getType(newSet([1,2,3]));// 'set'

47、hasClass

此段代碼返回DOM元素是否包含指定的Class樣式埠居。

consthasClass=(el,className)=>el.classList.contains(className);

hasClass(document.querySelector('p.special'),'special');// true

48诞丽、head

此段代碼輸出數(shù)組的第一個元素。

consthead=arr=>arr[0];

head([1,2,3]);// 1

49拐格、hide

此段代碼隱藏指定的DOM元素。

consthide=(...el)=>[...el].forEach(e=>(e.style.display='none'));

hide(document.querySelectorAll('img'));// Hides all <img> elements on the page

50刑赶、httpsRedirect

此段代碼的功能就是將http網(wǎng)址重定向https網(wǎng)址捏浊。

consthttpsRedirect=()=>{

if(location.protocol!=='https:')location.replace('https://'+location.href.split('//')[1]);

};

httpsRedirect();// If you are on http://mydomain.com, you are redirected to https://mydomain.com

51、indexOfAll

此代碼可以返回數(shù)組中某個值對應(yīng)的所有索引值撞叨,如果不包含該值金踪,則返回一個空數(shù)組。

constindexOfAll=(arr,val)=>arr.reduce((acc,el,i)=>(el===val?[...acc,i]:acc),[]);

indexOfAll([1,2,3,1,2,3],1);// [0,3]

indexOfAll([1,2,3],4);// []

52牵敷、initial

此段代碼返回數(shù)組中除最后一個元素的所有元素

constinitial=arr=>arr.slice(0,-1);

initial([1,2,3]);// [1,2]const initial = arr => arr.slice(0, -1);

initial([1,2,3]);// [1,2]

53胡岔、insertAfter

此段代碼的功能主要是在給定的DOM節(jié)點(diǎn)后插入新的節(jié)點(diǎn)內(nèi)容

constinsertAfter=(el,htmlString)=>el.insertAdjacentHTML('afterend',htmlString);

insertAfter(document.getElementById('myId'),'<p>after</p>');// <div id="myId">...</div> <p>after</p>

54、insertBefore

此段代碼的功能主要是在給定的DOM節(jié)點(diǎn)前插入新的節(jié)點(diǎn)內(nèi)容

constinsertBefore=(el,htmlString)=>el.insertAdjacentHTML('beforebegin',htmlString);

insertBefore(document.getElementById('myId'),'<p>before</p>');// <p>before</p> <div id="myId">...</div>

55枷餐、intersection

此段代碼返回兩個數(shù)組元素之間的交集靶瘸。

constintersection=(a,b)=>{

consts=newSet(b);

returna.filter(x=>s.has(x));

};

intersection([1,2,3],[4,3,2]);// [2, 3]

56、intersectionBy

按照給定的函數(shù)處理需要對比的數(shù)組元素毛肋,然后根據(jù)處理后的數(shù)組怨咪,找出交集,最后從第一個數(shù)組中將對應(yīng)的元素輸出润匙。

constintersectionBy=(a,b,fn)=>{

consts=newSet(b.map(fn));

returna.filter(x=>s.has(fn(x)));

};

intersectionBy([2.1,1.2],[2.3,3.4],Math.floor);// [2.1]

57诗眨、intersectionBy

按照給定的函數(shù)對比兩個數(shù)組的差異,然后找出交集孕讳,最后從第一個數(shù)組中將對應(yīng)的元素輸出匠楚。

constintersectionWith=(a,b,comp)=>a.filter(x=>b.findIndex(y=>comp(x,y))!==-1);

intersectionWith([1,1.2,1.5,3,0],[1.9,3,0,3.9],(a,b)=>Math.round(a)===Math.round(b));// [1.5, 3, 0]

58巍膘、is

此段代碼用于判斷數(shù)據(jù)是否為指定的數(shù)據(jù)類型,如果是則返回true芋簿。

constis=(type,val)=>![,null].includes(val)&&val.constructor===type;

is(Array,[1]);// true

is(ArrayBuffer,newArrayBuffer());// true

is(Map,newMap());// true

is(RegExp,/./g);// true

is(Set,newSet());// true

is(WeakMap,newWeakMap());// true

is(WeakSet,newWeakSet());// true

is(String,'');// true

is(String,newString(''));// true

is(Number,1);// true

is(Number,newNumber(1));// true

is(Boolean,true);// true

is(Boolean,newBoolean(true));// true

59峡懈、isAfterDate

接收兩個日期類型的參數(shù),判斷前者的日期是否晚于后者的日期益咬。

constisAfterDate=(dateA,dateB)=>dateA>dateB;

isAfterDate(newDate(2010,10,21),newDate(2010,10,20));// true

60逮诲、isAnagram

用于檢測兩個單詞是否相似。

constisAnagram=(str1,str2)=>{

constnormalize=str=>

str

.toLowerCase()

.replace(/[^a-z0-9]/gi,'')

.split('')

.sort()

.join('');

returnnormalize(str1)===normalize(str2);

};

isAnagram('iceman','cinema');// true

61幽告、isArrayLike

此段代碼用于檢測對象是否為類數(shù)組對象,是否可迭代梅鹦。

constisArrayLike=obj=>obj!=null&&typeofobj[Symbol.iterator]==='function';

isArrayLike(document.querySelectorAll('.className'));// true

isArrayLike('abc');// true

isArrayLike(null);// false

62、isBeforeDate

接收兩個日期類型的參數(shù)冗锁,判斷前者的日期是否早于后者的日期齐唆。

constisBeforeDate=(dateA,dateB)=>dateA<dateB;

isBeforeDate(newDate(2010,10,20),newDate(2010,10,21));// true

63、isBoolean

此段代碼用于檢查參數(shù)是否為布爾類型冻河。

constisBoolean=val=>typeofval==='boolean';

isBoolean(null);// false

isBoolean(false);// true

64箍邮、getColonTimeFromDate

用于判斷程序運(yùn)行環(huán)境是否在瀏覽器,這有助于避免在node環(huán)境運(yùn)行前端模塊時出錯叨叙。

constisBrowser=()=>![typeofwindow,typeofdocument].includes('undefined');

isBrowser();// true (browser)

isBrowser();// false (Node)

65锭弊、isBrowserTabFocused

用于判斷當(dāng)前頁面是否處于活動狀態(tài)(顯示狀態(tài))。

constisBrowserTabFocused=()=>!document.hidden;

isBrowserTabFocused();// true

66擂错、isLowerCase

用于判斷當(dāng)前字符串是否都為小寫味滞。

constisLowerCase=str=>str===str.toLowerCase();

isLowerCase('abc');// true

isLowerCase('a3@$');// true

isLowerCase('Ab4');// false

67、isNil

用于判斷當(dāng)前變量的值是否為 null 或 undefined 類型钮呀。

constisNil=val=>val===undefined||val===null;

isNil(null);// true

isNil(undefined);// true

68剑鞍、isNull

用于判斷當(dāng)前變量的值是否為 null 類型。

constisNull=val=>val===null;

isNull(null);// true

69爽醋、isNumber

用于檢查當(dāng)前的值是否為數(shù)字類型蚁署。

functionisNumber(n){

return!isNaN(parseFloat(n))&&isFinite(n);

}

isNumber('1');// false

isNumber(1);// true

70、isObject

用于判斷參數(shù)的值是否是對象蚂四,這里運(yùn)用了Object 構(gòu)造函數(shù)創(chuàng)建一個對象包裝器光戈,如果是對象類型,將會原值返回遂赠。

constisObject=obj=>obj===Object(obj);

isObject([1,2,3,4]);// true

isObject([]);// true

isObject(['Hello!']);// true

isObject({a:1});// true

isObject({});// true

isObject(true);// false

71田度、isObjectLike

用于檢查參數(shù)的值是否為null以及類型是否為對象。

constisObjectLike=val=>val!==null&&typeofval==='object';

isObjectLike({});// true

isObjectLike([1,2,3]);// true

isObjectLike(x=>x);// false

isObjectLike(null);// false

72解愤、isPlainObject

此代碼段檢查參數(shù)的值是否是由Object構(gòu)造函數(shù)創(chuàng)建的對象镇饺。

constisPlainObject=val=>!!val&&typeofval==='object'&&val.constructor===Object;

isPlainObject({a:1});// true

isPlainObject(newMap());// false

73、isPromiseLike

用于檢查當(dāng)前的對象是否類似Promise函數(shù)送讲。

constisPromiseLike=obj=>

obj!==null&&

(typeofobj==='object'||typeofobj==='function')&&

typeofobj.then==='function';

isPromiseLike({

then:function(){

return'';

}

});// true

isPromiseLike(null);// false

isPromiseLike({});// false

74奸笤、isSameDate

用于判斷給定的兩個日期是否是同一天惋啃。

constisSameDate=(dateA,dateB)=>dateA.toISOString()===dateB.toISOString();

isSameDate(newDate(2010,10,20),newDate(2010,10,20));// true

75、isString

用于檢查當(dāng)前的值是否為字符串類型监右。

constisString=val=>typeofval==='string';

isString('10');// true

76边灭、isSymbol

用于判斷參數(shù)的值是否是 Symbol 類型。

constisSymbol=val=>typeofval==='symbol';

isSymbol(Symbol('x'));// true

77健盒、isUndefined

用于判斷參數(shù)的類型是否是 Undefined 類型绒瘦。

constisUndefined=val=>val===undefined;

isUndefined(undefined);// true

78、isUpperCase

用于判斷當(dāng)前字符串的字母是否都為大寫扣癣。

constisUpperCase=str=>str===str.toUpperCase();

isUpperCase('ABC');// true

isLowerCase('A3@$');// true

isLowerCase('aB4');// false

79惰帽、isValidJSON

用于判斷給定的字符串是否是 JSON 字符串。

constisValidJSON=str=>{

try{

JSON.parse(str);

returntrue;

}catch(e){

returnfalse;

}

};

isValidJSON('{"name":"Adam","age":20}');// true

isValidJSON('{"name":"Adam",age:"20"}');// false

isValidJSON(null);// true

80父虑、last

此函數(shù)功能返回數(shù)組的最后一個元素该酗。

constlast=arr=>arr[arr.length-1];

last([1,2,3]);// 3

81、matches

此函數(shù)功能用于比較兩個對象,以確定第一個對象是否包含與第二個對象相同的屬性與值。

onstmatches=(obj,source)=>

Object.keys(source).every(key=>obj.hasOwnProperty(key)&&obj[key]===source[key]);

matches({age:25,hair:'long',beard:true},{hair:'long',beard:true});// true

matches({hair:'long',beard:true},{age:25,hair:'long',beard:true});// false

82灌旧、maxDate

此代碼段查找日期數(shù)組中最大的日期進(jìn)行輸出。

constmaxDate=(...dates)=>newDate(Math.max.apply(null,...dates));

constarray=[

newDate(2017,4,13),

newDate(2018,2,12),

newDate(2016,0,10),

newDate(2016,0,9)

];

maxDate(array);// 2018-03-11T22:00:00.000Z

83爵嗅、maxN

此段代碼輸出數(shù)組中前 n 位最大的數(shù)。

constmaxN=(arr,n=1)=>[...arr].sort((a,b)=>b-a).slice(0,n);

maxN([1,2,3]);// [3]

maxN([1,2,3],2);// [3,2]

84笨蚁、minDate

此代碼段查找日期數(shù)組中最早的日期進(jìn)行輸出操骡。

constminDate=(...dates)=>newDate(Math.min.apply(null,...dates));

constarray=[

newDate(2017,4,13),

newDate(2018,2,12),

newDate(2016,0,10),

newDate(2016,0,9)

];

minDate(array);// 2016-01-08T22:00:00.000Z

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赚窃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岔激,老刑警劉巖勒极,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虑鼎,居然都是意外死亡辱匿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門炫彩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匾七,“玉大人,你說我怎么就攤上這事江兢∽蛞洌” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵杉允,是天一觀的道長邑贴。 經(jīng)常有香客問我席里,道長,這世上最難降的妖魔是什么拢驾? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任奖磁,我火速辦了婚禮,結(jié)果婚禮上繁疤,老公的妹妹穿的比我還像新娘咖为。我一直安慰自己,他們只是感情好稠腊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布躁染。 她就那樣靜靜地躺著,像睡著了一般麻养。 火紅的嫁衣襯著肌膚如雪褐啡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天鳖昌,我揣著相機(jī)與錄音备畦,去河邊找鬼。 笑死许昨,一個胖子當(dāng)著我的面吹牛懂盐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播糕档,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼莉恼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了速那?” 一聲冷哼從身側(cè)響起俐银,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎端仰,沒想到半個月后捶惜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荔烧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年吱七,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹤竭。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡踊餐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出臀稚,到底是詐尸還是另有隱情吝岭,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站苍碟,受9級特大地震影響酒觅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜微峰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一舷丹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜓肆,春花似錦颜凯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至早芭,卻和暖如春彼城,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背退个。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工募壕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人语盈。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓舱馅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刀荒。 傳聞我的和親對象是個殘疾皇子代嗤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348