亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

2019 年編寫現代 JavaScript 代碼的5個小技巧(小結)

2024-05-06 16:47:45
字體:
來源:轉載
供稿:網友

內容基本是今年從其他大神的文章學習到的東西。分享給大家:

1 Array.includes 與條件判斷

一般我們判斷或用 ||

// conditionfunction test(fruit) { if (fruit == "apple" || fruit == "strawberry") {  console.log("red"); }}

如果我們有更多水果

function test(fruit) { const redFruits = ["apple", "strawberry", "cherry", "cranberries"]; if (redFruits.includes(fruit)) {  console.log("red"); }}

2 Set 與去重

ES6 提供了新的數據結構 Set。它類似于數組,但是成員的值都是唯一的,沒有重復的值。Set 本身是一個構造函數,用來生成 Set 數據結構。

數組去重

const arr = [3, 5, 2, 2, 5, 5];const unique = [...new Set(arr)];// [3,5,2]

Array.from 方法可以將 Set 結構轉為數組。我們可以專門編寫使用一個去重的函數

function unique(array) { return Array.from(new Set(array));}unique([1, 1, 2, 3]); // [1, 2, 3]

字符去重

let str = [...new Set("ababbc")].join("");console.log(str);// 'abc'

另外 Set 是如此強大,因此使用 Set 可以很容易地實現并集(Union)、交集(Intersect)和差集(Difference)。

let a = new Set([1, 2, 3]);let b = new Set([4, 3, 2]);// 并集let union = new Set([...a, ...b]);// Set {1, 2, 3, 4}// 交集let intersect = new Set([...a].filter(x => b.has(x)));// set {2, 3}// 差集let difference = new Set([...a].filter(x => !b.has(x)));// Set {1}

3 Map 與字典類型數據

一般而已,JavaScript 實現字典數據是基于 Object 對象。但是 JavaScript 的對象的鍵只能是字符串。對于編程來說有很多不便。 ES6 提供了 Map 數據結構。它類似于 Object 對象,也是鍵值對的集合,但是“鍵”的范圍不限于字符串,各種類型的值,字符串、數值、布爾值、數組、對象等等都可以當作鍵。

const resultMap = new Map() .set(-1, {text:'小于',color:'yellow') .set(0, {text:'等于',color:'black') .set(1, {text:'大于',color:'green') .set(null,{text:'沒有物品',color:'red'})let state = resultMap.get(null)// {text:'沒有物品',color:'red'}

Map 的遍歷順序就是插入順序

const map = new Map([["F", "no"], ["T", "yes"]]);for (let key of map.keys) { console.log(key);}// "F"// "T"for (let value of map.value()) { console.log(value);}// "no"// "yes"

4 函數式的方式處理數據

按照我的理解,函數式編程主張函數必須接受至少一個參數并返回一個值。所以所有的關于數據的操作,都可以用函數式的方式處理。

假設我們有這樣的需求,需要先把數組 foo 中的對象結構更改,然后從中挑選出一些符合條件的對象,并且把這些對象放進新數組 result 里。

let foo = [ {  name: "Stark",  age: 21 }, {  name: "Jarvis",  age: 20 }, {  name: "Pepper",  age: 16 }];//我們希望得到結構稍微不同,age大于16的對象:let result = [ {  person: {   name: "Stark",   age: 21  },  friends: [] }, {  person: {   name: "Jarvis",   age: 20  },  friends: [] }];

從直覺上我們很容易寫出這樣的代碼:

let result = [];//有時甚至是普通的for循環foo.forEach(function(person){  if(person.age > 16){    let newItem = {      person: person,      friends: [];    };    result.push(newItem);  }})

使用函數式的寫法,可以優雅得多

let result = foo .filter(person => person.age > 16) .map(person => ({  person: person,  friends: [] }));

數組求和

let foo = [1, 2, 3, 4, 5];//不優雅function sum(arr) { let x = 0; for (let i = 0; i < arr.length; i++) {  x += arr[i]; } return x;}sum(foo); // => 15//優雅foo.reduce((a, b) => a + b); // => 15

5 compose 與函數組合

以下代碼稱為組合 compose

const compose = function(f, g) { return function(x) {  return f(g(x)); };};

由于函數式編程大行其道,所以現在將會在 JavaScript 代碼看到大量的箭頭()=>()=>()=>的代碼。

ES6 版本 compose

const compose = (f, g) => x => f(g(x));

在 compose 的定義中, g 將先于 f 執行,因此就創建了一個從右到左的數據 流。這樣做的可讀性遠遠高于嵌套一大堆的函數調用.

我們選擇一些函數,讓它們結合,生成一個嶄新的函數。

reverse 反轉列表, head 取列表中的第一個元素;

const head = arr => arr[0];const reverse = arr => [].concat(arr).reverse();const last = compose(head, reverse);last(["jumpkick", "roundhouse", "uppercut"]);// "uppercut"

但是我們這個這個compose不夠完善,只能處理兩個函數參數。redux源碼有個很完備的compose函數,我們借鑒一下。

function compose(...funcs){ if (funcs.length === 0){   return arg => arg } if (funcs.length === 1 ){   return funcs[0] } return funcs.reduce((a,b)=>(...args) => a(b(...args)))}

有了這個函數,我們可以隨意組合無數個函數?,F在我們增加需求,組合出一個lastAndUpper函數,內容是先reverse 反轉列表, head 取列表中的第一個元素, 最后toUpperCase大寫。

const head = arr => arr[0];const reverse = arr => [].concat(arr).reverse();const toUpperCase = str => str.toUpperCase();const last = compose(head, reverse);const lastAndUpper = compose(toUpperCase, head, reverse,);console.log(last(["jumpkick", "roundhouse", "uppercut"]));// "uppercut"console.log(lastAndUpper(["jumpkick", "roundhouse", "uppercut"]))// "UPPERCUT"

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美国产另类| 91大神在线播放精品| 亚洲欧洲激情在线| 日韩欧美精品免费在线| 久久久视频在线| 国产成人精品免高潮在线观看| 精品亚洲一区二区三区在线播放| 青青草一区二区| 超碰97人人做人人爱少妇| 国内精品400部情侣激情| 中文字幕自拍vr一区二区三区| 日韩av大片免费看| 国产亚洲aⅴaaaaaa毛片| 国产欧美日韩精品丝袜高跟鞋| 亚洲欧美日韩综合| 综合网日日天干夜夜久久| 精品亚洲国产成av人片传媒| 亚洲直播在线一区| 欧美激情久久久久久| 成人黄色片在线| 久久久久北条麻妃免费看| 亚洲无限av看| 欧美激情日韩图片| 欧美成人精品一区| 亚洲精品成人久久| 久久久999精品免费| 久久精品国产成人精品| 成人久久久久爱| 91久久精品国产91性色| 国产精品678| 国产拍精品一二三| 欧美综合第一页| 欧美人与性动交| 精品福利在线观看| 国产精品视频一区二区三区四| 久久久午夜视频| 欧美在线视频在线播放完整版免费观看| 1769国产精品| 成人激情视频免费在线| 日韩免费黄色av| 8x海外华人永久免费日韩内陆视频| 精品二区三区线观看| 狠狠综合久久av一区二区小说| 亚洲一区二区免费在线| 欧美丝袜一区二区三区| 91经典在线视频| 亚洲精品日韩在线| 91精品国产综合久久香蕉最新版| 69av在线视频| 国模精品系列视频| 欧美孕妇毛茸茸xxxx| 久久精品亚洲国产| 日韩国产在线看| 久久激情视频免费观看| 亚洲久久久久久久久久| 欧美日韩亚洲一区二区| 91色在线视频| 青青精品视频播放| 美女精品视频一区| 在线日韩日本国产亚洲| 国产视频亚洲视频| 91精品国产综合久久香蕉| 国产不卡视频在线| 欧美日韩免费在线| www.美女亚洲精品| 2019av中文字幕| 91sao在线观看国产| 狠狠色狠狠色综合日日小说| 中文字幕亚洲二区| 色与欲影视天天看综合网| 亚洲毛片在线观看| 日韩视频免费在线观看| 成人国产精品一区| 国内精品久久久久久中文字幕| 久久高清视频免费| 久久成人这里只有精品| 在线精品视频视频中文字幕| 国产精品久久久久999| 亚洲美女精品久久| 国产mv免费观看入口亚洲| 国产精品99久久99久久久二8| 国产精品第100页| 91在线观看免费观看| 日韩二区三区在线| 亚洲综合自拍一区| 欧美高清视频在线| 成人免费黄色网| 日韩乱码在线视频| 中文字幕日韩高清| 热99精品只有里视频精品| 日韩精品视频免费专区在线播放| 福利精品视频在线| 亚洲精品成a人在线观看| 欧美性猛交xxxx久久久| 欧美黄色成人网| 国产丝袜一区二区| 亚洲国产高潮在线观看| 日韩av在线网| 97av在线影院| 亚洲精品视频在线播放| 日韩精品中文字幕在线播放| 一区二区三区天堂av| 国产精品日韩专区| 中文字幕自拍vr一区二区三区| 亚洲a成v人在线观看| 日韩欧美国产高清91| 久久久久久有精品国产| 亚洲福利在线播放| 91精品久久久久久久久青青| 亚洲人成77777在线观看网| 日韩美女视频免费在线观看| 性色av一区二区三区免费| 国产91色在线播放| 91精品国产高清久久久久久久久| 久久九九全国免费精品观看| 亚洲黄色www网站| 久久免费视频这里只有精品| 亚洲欧美日韩一区在线| 国产精品国内视频| 成人黄色中文字幕| 国产精品亚洲综合天堂夜夜| 成人xxxx视频| 国产精品第2页| 日韩免费黄色av| 亚洲最大中文字幕| 亚洲国产欧美一区二区三区同亚洲| 中文字幕成人精品久久不卡| 欧美一级高清免费播放| 欧美成aaa人片在线观看蜜臀| 8x拔播拔播x8国产精品| 97视频人免费观看| 国产精品第七十二页| 成人免费福利视频| 欧美成人性色生活仑片| 国产女人18毛片水18精品| 欧美精品一本久久男人的天堂| 欧美激情亚洲综合一区| 欧美中文字幕在线观看| 亚洲美女精品成人在线视频| 久久亚洲私人国产精品va| 国产aaa精品| 亚洲中国色老太| 久久久久久尹人网香蕉| 欧美老女人性视频| 亚洲xxxx18| 一区二区三区精品99久久| 久久影院资源站| 国产精品电影网站| 色综合久久精品亚洲国产| 欧美俄罗斯乱妇| 欧美老少配视频| 国产精品视频自拍| 午夜精品99久久免费| 日韩欧美第一页| 久久久av亚洲男天堂| 亚洲伊人久久大香线蕉av| 亚洲成人中文字幕| 日韩精品极品在线观看播放免费视频| xxxxx成人.com| 欧美日韩视频在线| 欧美大尺度在线观看| 欧美日韩成人黄色| 亚洲综合日韩中文字幕v在线| 欧美性生交xxxxxdddd|