iT邦幫忙

0

js 想問問這樣的寫法,是有簡化的空間嗎?

let settingRenderURL = '/templates/settingRender.html',
    addPayRenderURL = '/templates/addPayRender.html',
    feedbackRenderURL = '/templates/feedbackRender.html',
    privacyPolicyRenderURL = '/templates/privacyPolicyRender.html',
    termsRenderURL = '/templates/termsRender.html',
    gettingStartRenderURL = '/templates/gettingStartRender.html',
    errorRenderURL = '/templates/errorRender.html',
    addBookRenderURL = '/templates/addBookRender.html',
    faqRenderURL = '/templates/faqRender.html'

// when production
if (location.host.indexOf('127.0.0.1') === -1) {
    settingRenderURL = settingRenderURL.replace('.html', '/').replace('/templates', '')
    addPayRenderURL = addPayRenderURL.replace('.html', '/').replace('/templates', '')
    feedbackRenderURL = feedbackRenderURL.replace('.html', '/').replace('/templates', '')
    gettingStartRenderURL = gettingStartRenderURL.replace('.html', '/').replace('/templates', '')
    faqRenderURL = faqRenderURL.replace('.html', '/').replace('/templates', '')
    privacyPolicyRenderURL = privacyPolicyRenderURL.replace('.html', '/').replace('/templates', '')
    termsRenderURL = termsRenderURL.replace('.html', '/').replace('/templates', '')
    errorRenderURL = errorRenderURL.replace('.html', '/').replace('/templates', '')
    addBookRenderURL = addBookRenderURL.replace('.html', '/').replace('/templates', '')
}

我是一開始先帶預設值
假設網址直接符合條件,就全部改為我要的字串,但變數名稱不變
只是好奇這段代碼還有簡化空間嗎?

補充
想過用迴圈
只是要怎麼重新定義變數?

謝謝指教

看更多先前的討論...收起先前的討論...
wrxue iT邦新手 2 級 ‧ 2020-10-26 17:25:20 檢舉
js優化器
https://www.ez2o.com/App/Web/JSOptimizer
松松 iT邦研究生 2 級 ‧ 2020-10-26 17:26:19 檢舉
wrxue:我是知道可以壓縮啦,只是我好奇這段代碼還有簡化的空間嗎~雖然好像沒什麼,只是我怕有一百個好像會很可怕
wrxue iT邦新手 2 級 ‧ 2020-10-26 17:30:08 檢舉
沒學過陣列?字典?
柯柯 iT邦新手 5 級 ‧ 2020-10-26 17:31:02 檢舉
.replace('.html', '/').replace('/templates', '') 這邊全都一樣
幹嘛不要用迴圈 帶入變數就好
function a(data){
var test = data.replace('.html', '/').replace('/templates', '');
return test;
}
松松 iT邦研究生 2 級 ‧ 2020-10-26 17:31:14 檢舉
wrxue:陣列我知道,只是要怎麼重新定義變數?
松松 iT邦研究生 2 級 ‧ 2020-10-26 17:32:38 檢舉
柯柯:哈哈哈哈,這我大概一分鐘前想到可以做這件事。還是感謝你的回應。
tony iT邦新手 5 級 ‧ 2020-10-26 17:43:51 檢舉
小小淺見
把你要替換的String用變數存起來
下面就只要替換字串不用每個都做處理
需要用的時候再拼裝就好了
松松 iT邦研究生 2 級 ‧ 2020-10-26 17:51:06 檢舉
tony:原來是這樣,感謝!
我只想說,為何沒人想到用正則取代就好了。

2 個回答

3
dragonH
iT邦超人 5 級 ‧ 2020-10-26 19:50:30
最佳解答

初試

code

const routes = {
    settingRenderURL: '/templates/settingRender.html',
    addPayRenderURL: '/templates/addPayRender.html',
    feedbackRenderURL: '/templates/feedbackRender.html',
    privacyPolicyRenderURL: '/templates/privacyPolicyRender.html',
    termsRenderURL: '/templates/termsRender.html',
    gettingStartRenderURL: '/templates/gettingStartRender.html',
    errorRenderURL: '/templates/errorRender.html',
    addBookRenderURL: '/templates/addBookRender.html',
    faqRenderURL: '/templates/faqRender.html',
};
Object.keys(routes).forEach((key) => {
  location.host.indexOf('127.0.0.1') === -1
    ? routes[key] = routes[key].replace('.html', '/').replace('/templates', '')
    : routes[key]
})

codepen

甲土豆 iT邦新手 5 級 ‧ 2020-10-27 09:17:05 檢舉

H大神/images/emoticon/emoticon32.gif

kikulu iT邦研究生 4 級 ‧ 2020-10-27 16:11:20 檢舉

host要在外面判斷 因為沒有就不會需要跑回圈

0
listennn08
iT邦高手 8 級 ‧ 2020-10-26 22:48:13

用你之前問過的幾個問題來答
如何有效判斷 obj 裡面的 key?
js 把 object value 當新 array 的 key

let obj = {
  settingRenderURL: '/templates/settingRender.html',
  addPayRenderURL: '/templates/addPayRender.html',
  feedbackRenderURL: '/templates/feedbackRender.html',
  privacyPolicyRenderURL: '/templates/privacyPolicyRender.html',
  termsRenderURL: '/templates/termsRender.html',
  gettingStartRenderURL: '/templates/gettingStartRender.html',
  errorRenderURL: '/templates/errorRender.html',
  addBookRenderURL: '/templates/addBookRender.html',
  faqRenderURL: '/templates/faqRender.html'
}

if (location.host.indexOf('127.0.0.1') === -1) {
  obj = Object.keys(obj).reduce((item, key) => ({
    ...item,
    [key]: obj[key].replace(/(?:\/templates)\/(\w+)(?:.html)/, '$1/')
  }), {});
}

console.log(obj)
/*
{
  addBookRenderURL: "addBookRender/",
  addPayRenderURL: "addPayRender/",
  errorRenderURL: "errorRender/",
  faqRenderURL: "faqRender/",
  feedbackRenderURL: "feedbackRender/",
  gettingStartRenderURL: "gettingStartRender/",
  privacyPolicyRenderURL: "privacyPolicyRender/",
  settingRenderURL: "settingRender/",
  termsRenderURL: "termsRender/"
}
*/

我要發表回答

立即登入回答