Javascript对象保持包含旧数据

时间:2012-06-29 22:01:31

标签: javascript jquery

我正在尝试根据状态选择过滤JSON字符串的结果。我会更深入地解释。关于下面的代码,jsonstring包含整个javascript对象。我通过grep函数过滤状态,而不是将结果添加到主对象(jsonstring)中,这样我就可以获得具有新过滤器状态的整个javascript对象。但每次这个下拉调用我都会获得最后更新的javascript对象,但每次调用此函数时我都想要原始的jsonstring。

function dropdownchange(jsonstring)
{
 var e = document.getElementById("documents_filter");
 var svalue = e.options[e.selectedIndex].value;

 if(svalue == "In Progress")
 {
  var docstatusfilter;
  docstatusfilter = $.grep(jsonstring.Apps.statuslist , function(el, i) {
           return el.DOCUMENT_STATUS === "In Progress"        
            });   
    jsonstring.Apps.statuslist = docstatusfilter;   
 }

 if(svalue == "Auth (Verified)")
 {
  var authstatus;
  authstatus = $.grep(jsonstring.Apps.statuslist , function(el, i) {
           return el.DOCUMENT_STATUS === "Auth (Verified)"          
            });    
   jsonstring.Apps.statuslist = authstatus;    
 }

}

当这个函数第一次调用时它工作正常但是一旦我改变了下拉列表,它包含了jsonstring中的前一个记录,但是每当这个函数调用时我想要原始的jsonstring。

有人有任何想法吗?

由于

2 个答案:

答案 0 :(得分:1)

您需要做的就是将您的jsonstring复制到另一个对象中并在您的函数中使用该对象。这是一个克隆你的对象的函数 -

function clone(obj) {
    var copy = jQuery.extend(true, {}, obj);
    return copy;
}

现在像这样调用这个函数:

function dropdownchange(jsonstring)
{
var newJsonString = clone(jsonstring);
 var e = document.getElementById("documents_filter");
 var svalue = e.options[e.selectedIndex].value;
 ......
 .... 

只需在您的函数中使用newJsonString而不是jsonstring

答案 1 :(得分:0)

将原始字符串存储在单独的变量中。使用原始字符串变量作为函数的输入,然后将结果值设置为另一个变量。