当前位置: 首页 > 知识库问答 >
问题:

在执行foreach时更改数组中的值

尹承泽
2023-03-14
var arr = ["one","two","three"];

arr.forEach(function(part){
  part = "four";
  return "four";
})

alert(arr);

数组仍然具有它的原始值,是否有任何方法可以通过迭代函数对数组的元素进行写访问?

共有1个答案

燕博文
2023-03-14

如果您需要进行的更改是从列表中完全删除一个或多个项,那么使用for循环并在该循环中向后循环会更安全。

    for (let i = myArray.length - 1; i >= 0; i--)
    {
        const item = myArray[i];

        if (...) 
        {
           // remove item
           // https://stackoverflow.com/questions/5767325/how-can-i-remove-a-specific-item-from-an-array?rq=1
        }
    };

向后表示每个项的数组永远不会改变。如果您继续循环并删除item[3],那么item[4]现在是新的item[3],这不会使任何事情变得更容易。你不会让这个问题倒退。

当然,这是一个不使用foreach的解决方案,但重要的是要记住,“老式”方法往往是最好的。如果出于任何原因需要从循环中中断;(并且有很多项),那么for循环更高效,因为不能从for循环中中断。

 类似资料:
  • 问题内容: 例: 数组仍保留其原始值,是否可以通过迭代函数对数组元素进行写访问? 问题答案: 回调传递给元素,索引和数组本身。 编辑 -如注释中所述,该函数可以采用第二个参数,该参数将用作每次对回调的调用中的值: 第二个例子说明了自己是在回调中设置的。有人可能认为调用中涉及的数组可能是的 默认 值,但无论出于何种原因,它都不是。会如果没有提供第二个参数。 (注意:如果回调是一个函数,则上述内容不适

  • 问题内容: 我有一个,并且有一个侦听器连接到它。 现在,即使用户只是重新选择了先前选择的值,每次用户从下拉菜单中“选择”某项时,事件都会触发。 如果组合框的选定值与选定前的值不同,有什么方法可以仅触发事件? 我想我可以将组合框的值存储在不同的字段中,并在每次事件触发时将其进行比较,这似乎有点过头了。我有20个左右这样的组合框。我宁愿不要再有20个变量来存储值,这样事件就不会触发。 一定有更好的方法

  • 当我单击Governates_nameedt(EditText)时,我有两个想要的数组。在AlertDialog中显示Governate_names,并根据我选择的值,在state_names数组中选择值。当我运行代码时,asList被更改,我在<code>create()中得到一个错误。show() 处于状态_nameedt(编辑文本)。 我的代码 我的错误 05-13 16:42:25.720

  • 问题内容: 我在变量范围方面遇到麻烦。 我期望输出到,但结果是。为什么我在方法中更改了数组中的值,但是原来的数组却更改了? 问题答案: Java中的数组是一个对象。当您通过创建数组时,它是在堆上创建的,并且返回一个参考值(类似于C中的指针)并将其分配给您的变量。 在C语言中,这表示为: 当您将该变量传递给方法时,您将传递给该方法中的局部(堆栈)变量分配(复制)的参考值。不会复制数组的内容,仅复制参

  • 我不确定如何获得SQL执行所影响的行数。 我确实喜欢这样: 返回: (1)SQL数据操作语言(DML)语句的行计数,或(2)0表示不返回任何内容的SQL语句 啊! 我希望是: 从中提取第一个单词。字以空格或EOL行字符结束。 如果该单词(忽略大小写)是INSERT、UPDATE或DELETE,那么它是一个DML语句,并且的输出是相关的,否则的输出是无关的。 丑陋和容易出错。但这个问题唯一可能的解决