0

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

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
4

1 回答 1

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。否则,该属性将附加到该部分。工作小提琴

于 2013-07-06T06:42:20.780 回答