如果我改变某处,Javascript对象随处可见

时间:2015-08-04 10:19:51

标签: javascript

我有一个对象,其中一个值是数字数组,我调用两个函数,第一个函数对数据进行排序并显示它,第二个函数只显示它。

问题在于,在第二个函数中,数据也被排序。 (我没有在那里排序,数据已经排序了)

function1(data);
function2(data);

我该如何解决?

4 个答案:

答案 0 :(得分:2)

对此的一个简单解决方案是创建对象的副本然后使用它。

如果不希望使用:

,则可以创建对象的副本
b = Object.create(a)

在这种情况下,b是a的副本,但是如果你在a中进行了更改,它将不会反映在b中。有关详细信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

原因:在javascript对象中通过引用传递 http://www.w3schools.com/js/js_function_parameters.asp

答案 1 :(得分:2)

在排序之前在排序函数中创建克隆

试试这个

var cloneData=data.slice();

答案 2 :(得分:1)

你的function1正在对数据进行排序,这意味着你在调用function2时会对数据进行排序,你可以做的是在function1中获取数据,但是从数据中创建一个新变量然后更新,这样就不会改变原始数据

但是,为function1和function2显示一些代码确实可以帮助我们提供一些有用的代码:)

答案 3 :(得分:0)

您需要复制对象才能执行此操作。它与对象重新设置等有关。

非常简短的解释(方式太短,无法做到这一点)是function1和function2正在使用相同的数组,因此当function1更改它时,这在function2中可见。阅读这个问题here,这绝对是你应该作为程序员研究的东西。

var data = ['b', 'c', 'a'];
var sortedData = data.slice(0); // shallow copy, objects in the array are not copied

调用与sortedData排序的函数,调用仅显示data的函数

阅读有关对象引用和原始值的更多信息,以了解更改一个数组中的值将如何影响其他数组,但如果您不再更改这些值,则这不是您需要担心的问题。 / p>