Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按值将数组传递给函数_Javascript_Jquery - Fatal编程技术网

Javascript 按值将数组传递给函数

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

这是我的第一个函数,我传递给json 如果这是我第一次保存原始json,则结束

 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++;