如果条件需要 - 测试属性是否存在然后创建一个

时间:2013-07-06 03:59:13

标签: javascript jquery

下面是一些代码,它会覆盖字符串中的属性,但是此函数中缺少的是测试属性是否存在以及是否存在然后创建它然后返回整个字符串的条件,否则会覆盖该属性并返回它当前所做的整个字符串。我试过这个,但我没有得到理想的结果。有人可以查看并尝试使用下面的示例函数动态创建新属性。

var cookieValue = 
   'id=1&state=normal&theme=purple:
    id=2&state=maximized&theme=pink:
    id=3&state=maximized&theme=black';

function setProperties(cookie, id , name, value, create) {
  var sections = $.map(cookie.split(":"), function (section) {
      var pairs;

      if (section.indexOf("id=" + id) === 0) {
          // if condition here - create a new property
          // else run code below
          pairs = $.map(section.split("&"), function (pair) {
              if (pair.indexOf(name + "=") === 0) {
                  return name + "=" + value;
              }else {                       
                  return pair;  
              }
          });

          return pairs.join("&");

      } else {
          return section;
      }
  });

  return sections.join(":");
}
alert(setProperties(cookieValue, '2', 'theme', 'green', true));
alert(setProperties(cookieValue, '2', 'color', 'orange', true)); // new property

1 个答案:

答案 0 :(得分:1)

请记住您是否找到了该物业:

      if (section.indexOf("id=" + id) === 0) {
        // if condition here - create a new property
        // else run code below
        var found = false;
        pairs = $.map(section.split("&"), function (pair) {
            if (pair.indexOf(name + "=") === 0) {
                return name + "=" + value;
                found = true;
            } else {                       
              return pair;  
            }
        });

        section = pairs.join("&");
        if (!found) {
            section += "&" + name + "=" + value;
        }
    }
    return section; 

如果存在属性,则found将设置为true。否则该属性将附加到该部分。 Working fiddle