重新格式化JS代码snipet的最佳方法

时间:2018-03-23 09:55:10

标签: javascript refactoring

我想重新格式化以下代码,以尽可能保持最小化。建议重新格式化代码并将其用作单一方法。

function Cookie_Exist(cookieName) {
         var all_cookies = document.cookie.split(';');
         for (i = 0; i < all_cookies.length; i++) {
             var temp_cookie = all_cookies[i].split('=');
             var cookie_name = temp_cookie[0].replace(/^\s+|\s+$/g, '');
             if (cookie_name === cookieName) {
                 return true;
             }
         }
         return false;
     }

function Get_Cookie(cookieName) {
    var all_cookies = document.cookie.split(';');
      for (i = 0; i < all_cookies.length; i++) {
       var temp_cookie = all_cookies[i].split('=');
       var cookie_name = temp_cookie[0].replace(/^\s+|\s+$/g, '');
     if (cookie_name === cookieName) {
     return temp_cookie[1];
    }
 }
return null;
}

4 个答案:

答案 0 :(得分:2)

不是每次重新分析cookie都可以做一次并建立一个Map:

 const cookies = new Map(document.cookie.split(";").map(pair => pair.split("=")));

然后就像

一样简单
 cookies.get("name");

  cookies.has("name")

答案 1 :(得分:1)

如果你必须保留函数Cookie_Exist而不是@ Jonas的方法,那么你最好使用数组方法而不是for循环。抽象可以使代码更短更清晰:

function Cookie_Exist(cookieName) {
  const allCookies = document.cookie.split(';');
  return allCookies.includes(cookieStr => {
    const thisCookieName = cookieStr.split('=')[0].replace(/^\s+|\s+$/g, '');
    return cookieName === thisCookieName;
  });
}

答案 2 :(得分:0)

您根本不需要Cookie_Exist()函数,它与Get_Cookie()函数的作用相同。使用Get_Cookie()到处而不是Cookie_Exist()并检查您的结果。如果为false,则cookie不存在。就这么简单。

答案 3 :(得分:0)

您可能希望尽可能“尽可能地”澄清您的意思。如果你指的是有效率,你肯定应该采用Jonas W建议的路线。

如果您指的是减少行数?他的答案也很好,但我建议不要过多关注行数。可读性应该是您的首要目标。换句话说,你应该努力保持最低限度的是你的代码的人类读者必须跳过的精神箍的数量才能理解正在发生的事情。

此外,您为剥离空格所做的正则表达式可以替换为为此目的而存在的String.prototype.trim()

function parseCookie(cookie) {
    let { name, value } = cookie.split('=');
    return [ name.trim(), value ];
}

function parseCookies() {
    let cookies = document.cookie.split(';')
    return new Map(cookies.map(parseCookie))
}


// Usage:

const cookieMap = parseCookies();

cookieMap.has('name');

cookieMap.get('name'):