javascript - 将反向数组保存到javascript中的变量

标签 javascript arrays reverse

我有一组颜色,我希望选项可以反转。我有一个切换功能,基本上可以根据数组为元素着色。如果我抛出一个反转变量,它就会反转,但它反转的是全局变量而不是局部变量。

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/

相关文章:

CakePHP 2.x 反向路由链接助手

javascript - 没有 Ctrl-click 要求的 HTML 多选框

javascript - 将 php 数组转换为 javascript 数组

javascript - 在 React Native 中渲染等宽按钮

php - 如何解析 onemap.sg API 响应?

c# - 如何将十六进制转换为 0x... 字节格式 (C#)

javascript - 如何使用 javascript 暂停 chrome 中的调试器?

php - 如何使用 PHP 在 MySQL 中插入嵌套数组

css - 反向 CSS3 过渡

c - 我在 C 的输出中收到未知字符