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; 

プロパティが存在する場合、foundtrue に設定されます。それ以外の場合、プロパティはセクションに追加されます。働くフィドル

于 2013-07-06T06:42:20.780 に答える