Javascript对象保留包含旧数据

Javascript object keep contain the old data

本文关键字:数据 包含旧 保留 对象 Javascript      更新时间:2023-09-26

>我正在尝试根据状态选择从 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。

有人知道吗?

谢谢

您需要做的就是将 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

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