我正在尝试根据状态选择过滤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。
有人有任何想法吗?
由于
答案 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)
将原始字符串存储在单独的变量中。使用原始字符串变量作为函数的输入,然后将结果值设置为另一个变量。