Javascript 按值将数组传递给函数
这是我的第一个函数,我传递给json 如果这是我第一次保存原始json,则结束Javascript 按值将数组传递给函数,javascript,jquery,Javascript,Jquery,这是我的第一个函数,我传递给json 如果这是我第一次保存原始json,则结束 function loadchart2(div, json, lista,tipo) { var listaId = lista; if(l==0){ jsonSecCall =JSON.parse(JSON.stringify(json)); listaSecCall=listaId; l++; } 我修改json,然后单击一个按钮。 调用第二个函数并调用loadcart
function loadchart2(div, json, lista,tipo) {
var listaId = lista;
if(l==0){
jsonSecCall =JSON.parse(JSON.stringify(json));
listaSecCall=listaId;
l++;
}
我修改json,然后单击一个按钮。
调用第二个函数并调用loadcart2并传递json原始文件,但实际收到json修改,什么
$(“#giorni”)。在('click',函数(){
var nuova=jsonSecCall
$("#svgDateLine2").remove();
loadchart2("content", nuova,listaSecCall,"giorni");
checkContainer();
});
可能是json,它作为参考,是可能的
这是一个例子。
第一个控制台日志打印json修改,可以,下一个控制台日志应该
打印原始json,但打印修改的json。这是javascript的缺点。JS中的所有内容都是按值传递的,对象除外,因为它们是引用的集合。这是出于性能原因而做的-复制整个对象的成本很高 要在不改变原始对象的情况下修改对象,您应该复制它。一种方法是使用。这可能比对对象进行深度复制要好;-) 然后,代码片段将被删除
var copy = {}
Object.assign(copy, source)
这是javascript的缺点。JS中的所有内容都是按值传递的,除了对象,因为它们是引用的集合。这是出于性能原因而做的——复制整个对象的成本很高 要在不改变原始对象的情况下修改对象,您应该复制它。一种方法是使用。这可能比对对象进行深度复制要好;-) 然后,代码片段将被删除
var copy = {}
Object.assign(copy, source)
我不知道你的变量的类型,但通常我用它来复制
var a = [1, 2, 3];
var b = a.slice(0); //Creates a new array
有关复制对象的信息,请参见@alexclec-answer。我不知道变量的类型,但通常用于复制
var a = [1, 2, 3];
var b = a.slice(0); //Creates a new array
有关复制对象的信息,请参见@alexclec answer。首先,看起来您不是在处理JSON,而是在处理对象(或数组)。JSON是一个字符串 其次,您没有将原始JSON传递到loadchart2(如您所了解的),您已经通过变量
jsonSecCall
您可能想做的是实际维护原始JSON(字符串)对象的形式,并将其用作原始的未修改对象。您可以在需要原始对象引用时对其执行
JSON.parse
。首先,它看起来不像是在处理JSON,而是在处理对象(或数组)。JSON是一个字符串
function loadchart2(div, json, lista,tipo) {
var listaId = lista;
if(l==0){
jsonSecCall =JSON.parse(JSON.stringify(json));
listaSecCall=listaId;
l++;
其次,您没有将原始JSON传递到loadchart2(如您所了解的),您已经通过变量jsonSecCall
您可能想做的是实际维护对象的原始JSON(字符串)形式,并将其用作原始的未修改对象。您可以在需要原始对象引用时对其执行
JSON.parse
。这到底是什么?;-)JSON.parse(JSON.stringify(JSON));@Robert那是对象的深层副本。不清楚你在问什么,你能提供你正在进行的确切调用,以及你希望每个调用的参数是什么吗?我复制json原件。我必须复制在函数第一次调用时收到的json,并将其传递给以后的调用,但我想传递我收到的第一个调用不是什么改变了这到底是什么?;-)JSON.parse(JSON.stringify(JSON));@Robert那是对象的深层副本。不清楚你在问什么,你能提供你正在进行的确切调用,以及你希望每个调用的参数是什么吗?我复制json原件。我必须复制在函数第一次调用时收到的json,并将其传递给以后的调用,但我想传递我收到的第一个调用不是当时的changedError:json.slice不是function@Sax92正如他指出的,原因是数组。@Sax92-您对JSON(字符串)和可以用JSON格式表示的对象或数组之间的区别有一个明显的误解。我的JSON是:边:数组(4)节点:数组(5)原型:Object@Sax92我从未见过这样的json-string.Error:json.slice不是function@Sax92正如他指出的,原因是数组。@Sax92-您对JSON(字符串)和可以用JSON格式表示的对象或数组之间的区别有一个明显的误解。我的JSON是:边:数组(4)节点:数组(5)原型:Object@Sax92我从未见过这样的json-string.jsonSecCall接收原始json,在json is修改而不是jsonSecCall后,我在以后的调用中传递jsonSecCall,但jsonSecCall它也包含更改,jsonSecCall应该包含原始json。您正在制作对象的副本,但稍后将修改该对象并使用它gain.创建另一个变量,该变量只是JSON.stringify的结果,然后在loadChart2中需要时,对保存到变量的字符串调用JSON.parse。yes是一个副本,但副本(jsonSecCall)如果json发生更改,则会修改,但不应修改这是一个示例,,第一个控制台日志已修改,可以,下一个控制台.log打印json已修改,而不是json原始。jsonSecCall接收原始json,json修改后不是jsonSecCall,我在以后的调用中传递jsonSecCall,但jsonSecCall它也包含更改,jsonSecCall应保留原始值。您正在创建对象的副本,但稍后将修改该对象并再次使用它。创建另一个变量,该变量仅是JSON.stringify的结果,然后在loadChart2中需要时,在保存到变量的字符串上调用JSON.parse。yes是副本,但副本(jsonSecCall)如果json发生更改,则会修改,不应修改。这是一个示例,第一个控制台日志已修改,可以,下一个控制台日志打印json已修改,而不是json原始。
function loadchart2(div, json, lista,tipo) {
var listaId = lista;
if(l==0){
jsonSecCall =JSON.parse(JSON.stringify(json));
listaSecCall=listaId;
l++;