ES6中的類+Map

昨天有一道題完残,用ES6中的類寫一道業(yè)務(wù)編程題览徒。題目大致如下

需求:

員工類(Staff)
屬性:
員工姓名(name)
所在部門名字(departmentName)(是一個字符串)
入職時間(time)(例如:2015 這種格式的字符串即可)

公司類(Company)
屬性:部門:(departmentMap) (類型是一個Map,Map的鍵是部門的名字罚缕,值是對應(yīng)部門的員工數(shù)組,員工數(shù)組里是每個員工對象)
方法:
1浮毯、添加員工
要求:首先員工姓名和入職時間不能同時重復(fù)。 如果添加的員工所在部門不存在泰鸡,你需要幫他
創(chuàng)建該部門债蓝,并且加入到該部門中,如果該部門存在直接加入該部門即可盛龄。
2饰迹、顯示所有員工信息的方法
要求:打印格式為
xxx部門:
姓名:小雪 入職時間:2015
姓名:小剛 入職時間:2016
xxx部門:
姓名:xxx 入職時間:xxx

拿到題目之后 感覺很熟悉也很陌生,因為ES6是新學(xué)的但是也大都忘記了余舶。
得蹦锋,回頭查查資料吧。
通過復(fù)習(xí)資料我們可以知道JS中的類的基本寫法

class Staff{
//構(gòu)造器 直指類本身
    constructor(參數(shù)1欧芽,參數(shù)2...){
             this.屬性1 = 參數(shù)1;
             this.屬性2 = 參數(shù)2;
             ...
    }
//方法
    toString(){
            //有默認(rèn)方法 可以重寫
    }

    //...其它方法
}

弄懂了這個,員工類和公司類的結(jié)構(gòu)就很好寫了

//員工類
class Staff{
    //構(gòu)造器 
    constructor(name,departmentName,time){
           //屬性
        this.name = name;
        this.departmentName = departmentName;
        this.time = time;
    }
}

//公司類結(jié)構(gòu)如下
class Company{
    constructor(){
        //Map 數(shù)據(jù)結(jié)構(gòu) 參見ES6新特性課件
        this.departmentMap = new Map();
    }
    addStaff(staff){
        //可以省略 不過下面要寫好長代碼staff.name ...
        var name = staff.name;
        var departmentName = staff.departmentName;
        var time = staff.time;
        //遍歷判斷是否同名同時入職 無法在遍歷中操作 立個flag在后面處理
        var flag = 0;
        //首先判斷是否存在部門 如果不存在 直接創(chuàng)建部門 并添加員工到數(shù)組 并打印
        if(!this.departmentMap.has(departmentName)){

            this.departmentMap.set(departmentName,[staff]);
            console.log("success");
                    
        }else{
            //如果存在部門 現(xiàn)獲取該部門對應(yīng)的員工數(shù)組
            var arr = this.departmentMap.get(departmentName);
            //遍歷判斷新添加的員工是否已存在(通過flag的增量是否等于員工數(shù)組的長度)
            for(var s of arr){
                //不存在 flag++
                if(!(name==s.name&&time==s.time)){
                    flag++;
                }
            }
            //如果flag等于員工數(shù)組的長度 說明不存在同時入職同名員工 這時添加 否則打印error
            if(flag==arr.length){
                arr.push(staff);
                console.log("sucess");
            }else{
                console.log("error");
            }
        }
    }

    printStaff(){
        //注意參數(shù) 是value在前 key在后  還有一個參數(shù) 我沒用
        this.departmentMap.forEach(function(value,key){
            //打印部門
            console.log("部門"+key);
            //遍歷員工數(shù)組 打印員工信息
            for(var staff of value){
                console.log("姓名:"+staff.name + "  入職時間:"+staff.time);
            }
        });
    }

}

其中重點要復(fù)習(xí)的知識點 map數(shù)據(jù)結(jié)構(gòu)

Map數(shù)據(jù)結(jié)構(gòu)(ES6提供)葛圃。它類似于對象千扔,也是鍵值對的集合憎妙,但是“鍵”的范圍不限于字符串,各種類型的值(包括對象)都可以當(dāng)作鍵曲楚。

  1. Map的創(chuàng)建與基本存取
  • Map創(chuàng)建也是使用Map構(gòu)造函數(shù)
  • 向Map存儲鍵值對使用set(key, value);方法
  • 可以使用get(key),來獲取指定key對應(yīng)的value 值不存在默認(rèn)為 undefined
 var map = new Map();
 map.set("a", "lisi");
 console.log(map.get('a'));
  1. Map與Set類似的三種方法
  • has(key) 判斷給定的 key 是否在 map 中存在
  • delete(key) 移除 map 中的 key 及對應(yīng)的值
  • clear() 移除 map 中所有的鍵值對
  1. Map初始化
    創(chuàng)建Map的時候也可以像Set一樣傳入數(shù)組厘唾。但是傳入的數(shù)組中必須有兩個元素,這個兩個元素分別是一個數(shù)組龙誊。
var map = new Map([
      //每一個數(shù)組中抚垃,第一個是是map的可以,第二個是map的value趟大。
      //如果只有第一個鹤树,則值是undefined
        ["name", "lisi"],  
        ["age", 20],
        ["sex", "nan"]
    ]);
  1. Map的forEach()方法
<script type="text/javascript">
    var map = new Map([
        ["name", "李四"],
        ["age", 20],
        ["sex", "nan"]
    ]);
    /*
        回調(diào)函數(shù)有參數(shù):
        參數(shù)1:鍵值對的value
        參數(shù)2:鍵值對的key
        參數(shù)3:map對象本身
     */
    map.forEach(function (value, key, ownMap) {
        console.log(`key=${key} ,vlue=${value}`);
        console.log(this);
    })
 </script>

弄懂了Map數(shù)據(jù)結(jié)構(gòu)后,題目就已經(jīng)解決了一半逊朽。然后根據(jù)類的創(chuàng)建方法解決問題罕伯!-> ;)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叽讳,一起剝皮案震驚了整個濱河市追他,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岛蚤,老刑警劉巖邑狸,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涤妒,居然都是意外死亡单雾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門届腐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铁坎,“玉大人,你說我怎么就攤上這事犁苏∮财迹” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵围详,是天一觀的道長朴乖。 經(jīng)常有香客問我,道長助赞,這世上最難降的妖魔是什么买羞? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮雹食,結(jié)果婚禮上畜普,老公的妹妹穿的比我還像新娘。我一直安慰自己群叶,他們只是感情好吃挑,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布钝荡。 她就那樣靜靜地躺著,像睡著了一般舶衬。 火紅的嫁衣襯著肌膚如雪埠通。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天逛犹,我揣著相機與錄音端辱,去河邊找鬼。 笑死虽画,一個胖子當(dāng)著我的面吹牛舞蔽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狸捕,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼喷鸽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了灸拍?” 一聲冷哼從身側(cè)響起做祝,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸡岗,沒想到半個月后混槐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡轩性,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年声登,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揣苏。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡悯嗓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卸察,到底是詐尸還是另有隱情脯厨,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布坑质,位于F島的核電站合武,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏涡扼。R本人自食惡果不足惜稼跳,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吃沪。 院中可真熱鬧汤善,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锉屈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垮耳,已是汗流浹背颈渊。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留终佛,地道東北人俊嗽。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像铃彰,于是被迫代替她去往敵國和親绍豁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法牙捉,類相關(guān)的語法竹揍,內(nèi)部類的語法,繼承相關(guān)的語法邪铲,異常的語法芬位,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,805評論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)带到,斷路器昧碉,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 1、永遠不讓用戶感到冷清寂寞揽惹。 2被饿、盡可能的回答用戶的每一個疑問。 3搪搏、觀點無論認(rèn)同與否狭握,必須給予響應(yīng)。 4慕嚷、“讓...
    一只正經(jīng)的運營狗閱讀 476評論 1 10
  • 幾天前哥牍,在知乎上看到一個問題,大概是有什么忠告是你要給年輕人的喝检?就有個人回答說:趁自己還是年輕的時候多寫一些東西嗅辣,...
    Kohiu閱讀 218評論 0 1