第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

JavaScript怎樣實(shí)現(xiàn)快速映射

JavaScript怎樣實(shí)現(xiàn)快速映射

慕容3067478 2019-02-14 13:30:00
javascript實(shí)現(xiàn)快速映射,類似這樣:let config = {    '年|year|nian': 'year',    '月|month|yue': 'month'}function a(type) {    type = config[type]; // 只要type能和映射表某一鍵值匹配,則能快速映射為另一個(gè)值    console.log(type);}a('年');a('month');a('year');這樣不用寫if else,并且后續(xù)維護(hù)也比較簡(jiǎn)單,只要添加或者刪除映射表里的映射規(guī)則即可下面是我實(shí)現(xiàn)的映射方法,但是這樣寫效率太低了,每次都要遍歷,而且都要new一個(gè)正則對(duì)象let config = {    '年|year|nian': 'year',    '月|month|yue': 'month'};function getType(type) {    let tstr,    treg;    type = type + '';    for (tstr in config) {        treg = new RegExp(tstr, 'g');        if (treg.test(type)) {            return config[tstr];        }    }}
查看完整描述

1 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

思路

應(yīng) @angularbaby 要求添加說(shuō)明。


首先很容易想到的是一個(gè)查找表(映射表),而 JS 里最簡(jiǎn)單的映射表就是 JS 對(duì)象。


從題主提供的 config 來(lái)看,是多個(gè)鍵對(duì)應(yīng)同一個(gè)映射目標(biāo),多組這樣的對(duì)應(yīng)關(guān)系。而需要的結(jié)果是一對(duì)一的對(duì)應(yīng)關(guān)系,所以很容易想到,將多對(duì)一關(guān)系拆分成多個(gè)一對(duì)一關(guān)系。


所以下面的代碼就干了兩件事情,① 將原來(lái)的一個(gè) Key 拆分成多個(gè) Key,生成一對(duì)一關(guān)系的映射表;② 提供一個(gè)查詢函數(shù),在生成的映射表中查詢結(jié)果。


代碼及演示

const a = (config => {

    const map = Object.keys(config)

        // 對(duì)原有 config 的 Key(list) 進(jìn)行逐個(gè)聚合處理

        // 初始值是一個(gè)空映射表(空對(duì)象)

        // 每次聚合過(guò)程會(huì)添加若干鍵值對(duì),鍵不同,值相同

        .reduce((dict, keys) => {

            // 緩存目標(biāo)值,即標(biāo)準(zhǔn)的 year、month 等

            const target = config[keys];

            // 拆分 key(list),逐個(gè)將每個(gè) key 添加到映射表中

            keys.split("|").forEach(key => dict[key] = target);

            return dict;

        }, {});


    // 反回一個(gè)查詢函數(shù),它只是簡(jiǎn)單的返回映射表中的查詢值

    return function(key) {

        return map[key];

    };

})({

    "年|year|nian": "year",

    "月|month|yue": "month"

});

https://img1.sycdn.imooc.com//5c679ccf0001f30c06410389.jpg


可改進(jìn)之處

現(xiàn)在這個(gè)處理沒有考慮 config 更新的情況,但這個(gè)不是主要問(wèn)題。主要問(wèn)題是沒有容錯(cuò),如果調(diào)用 a() 的時(shí)候,沒有找到相應(yīng)的 key,會(huì)返回 undefined,這個(gè)可以按實(shí)際需求對(duì)返回值進(jìn)行處理,比如


假設(shè)未查詢,要求返回原值,那么可以將查詢函數(shù)修改為


return map[key] || key;


查看完整回答
反對(duì) 回復(fù) 2019-02-16
  • 1 回答
  • 0 關(guān)注
  • 557 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)