我有一组颜色,我希望选项可以反转。我有一个切换功能,基本上可以根据数组为元素着色。如果我抛出一个反转变量,它就会反转,但它反转的是全局变量而不是局部变量。
var inc_colors = ['#000','#333','#888']; //global inc_colors
function toggleLegendColors(reverse){
var reverse = reverse || false;
var colors = inc_colors; //local colors
if(reverse) colors.reverse(); //reverses inc_colors array as well as colors
...
}
如何在不改变全局数组的情况下得到反转的全局数组?
最佳答案
由于没有人真正解释过您遇到问题的原因,我将把它添加到组合中。
当您在 javascript 中将数组或对象分配给变量时,它会分配对该数组/对象的引用。它不会复制数组/对象。因此,您将拥有两个变量,它们都指向同一个数组/对象,并且修改其中一个会影响另一个(因为它们都指向相同的底层数据)。
所以,当你有这个:
var inc_colors = ['#000','#333','#888']; //global inc_colors
var colors = inc_colors; //local colors
您现在只有两个变量,它们都指向完全相同的数据片段。修改其中一个,相同的结果将通过另一个变量显示,因为它们指向相同的基础数据。
如果你想制作一个副本,那么必须明确地制作一个副本(javascript 不会自动为你做)。对于一个数组,最简单的浅拷贝方式是这样的:
var newColors = Array.prototype.slice.call(inc_colors);
因此,在您的确切代码中,您可以像这样应用该副本:
var inc_colors = ['#000','#333','#888']; //global inc_colors
function toggleLegendColors(reverse){
var reverse = reverse || false;
var colors = Array.prototype.slice.call(inc_colors); //local copy of the colors array
if(reverse) colors.reverse(); //reverses inc_colors array as well as colors
...
}
关于javascript - 将反向数组保存到javascript中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14366556/