为数组中的变量分配新值的forEach循环不会替换变量的值[重复]

Posted

技术标签:

【中文标题】为数组中的变量分配新值的forEach循环不会替换变量的值[重复]【英文标题】:forEach loop to assign new value to variables in array is not replacing value of variables [duplicate] 【发布时间】:2020-02-09 07:52:20 【问题描述】:

我正在尝试使用 forEach 循环遍历包含三个变量的数组,并将每个变量的值更改为 0-255 之间的随机数。

我已经开始给每个变量一个简单的值:

let rgb1 = 1;
let rgb2 = 2;
let rgb3 = 3;

然后我将这些变量放入一个数组中:

let rgbVariables = [rgb1,rgb2,rgb3];

我的函数返回 0-255 之间的随机数

function randomColor() 
    return Math.floor((Math.random() * 255));

最后是我在数组上循环的函数

function refreshRGBNumbers() 
    rgbVariables.forEach(function(rgb) 
      rgb = randomColor();
    );

当我单击按钮时会调用 refreshRGBNumbers 函数。我已经验证该函数被正确调用,但是当我检查数组中变量的值时,它们仍然是 1,2,3。

我需要在这里做什么才能让函数正确地用随机数替换数组变量?

【问题讨论】:

rgbVariables.forEach(function(rgb) rgb = randomColor(); ); 对数组没有任何作用,它不会改变值 你不能改变原始值。做forEach((rgb, index, array) => array[index] = randomColor()) 或者更好.map(() => randomColor()) 【参考方案1】:

如果你想改变数组中的值,你需要直接改变它。

rgbVariables.forEach(function(val, index, array)  array[index] = randomColor(); )

【讨论】:

数组中的值是原始值,forEach 没有传递对数组元素的引用,它传递原始值 @epascarello 当我用你在那里的功能替换我的功能时,我遇到了同样的问题。新函数:function refreshRGBNumbers() rgbVariables.forEach(function(val, index, array) array[index] = randomColor(); ) console.log(rgb1); console.log(rgb2); console.log(rgb3); 返回和之前一样的 1,2,3 变量永远不会更新,这不是它的工作原理。 当您将变量粘贴到数组中时,它并没有引用该变量,而是当时的值。

以上是关于为数组中的变量分配新值的forEach循环不会替换变量的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP:替换数组值不会在 foreach 循环后保留

在 for 循环期间为列表中的项目分配新值不起作用?

php中foreach使用引用的陷阱

foreach用法

UITableViewCell detailTextLabel在为其分配新值时不会更新其文本

foreach用法