javascript - forEach 不会改变我传入的数组

标签 javascript

我创建了一个简单的 forEach 函数,我试图理解为什么当我使用 myArray 运行它时,它不会改变数组,即使我运行 element*2

function forEach(array, callback) {
  for (var i = 0; i < array.length; i++) {
    callback(array[i],i,array)
  };
}

var myArray = [1,2,3]
forEach(myArray,function(element){element*2})
console.log(myArray)///[1,2,3]

最佳答案

您必须在 for 循环中修改数组,如下所示:

function forEach(array, callback) {
  for (var i = 0; i < array.length; i++) {
    array[i] = callback(array[i],i,array)
  };
}

var myArray = [1,2,3]
forEach(myArray,function(element){return element*2})
console.log(myArray)

正如我们在评论中讨论的那样,最好的方法是实现类似 map 功能的功能:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map

function map(array, callback) {
  var out = [];
  for (var i = 0; i < array.length; i++) {
    out.push(callback(array[i],i,array))
  };

  return out;
}

var myArray = [1,2,3]
var myOtherArray = map(myArray,function(element){return element*2})
console.log(myArray)
console.log(myOtherArray)

这样 myArray 没有被触及,你创建一个新的。这通常是最好的选择,但有时您可能想就地修改它,因为它很大或出于其他(好的?)原因。在这种情况下,您可以使用第一个选项。

关于javascript - forEach 不会改变我传入的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127681/

相关文章:

javascript - 使用 jquery 计算 upwork 等付款的百分比

javascript - React - 如何扩展具有子组件的组件并保留它们?

javascript - 如何让 Foundation Reveal Modal 在 Rails 中工作?

javascript - 限制 Bootstrap 上切换开关的数量

javascript - AmCharts,捕获期间选择器的点击事件

javascript - 表单数据在新页面中不可见 - PHP + Javascript

javascript - Cypress 覆盖 'type' 命令添加一个小等待,如果之前调用 .clear() 会抛出 promise 错误

javascript - 启用分页时如何从 JSON api 获取所有数据?

javascript - 结合 jQuery 和 jetpack 无限滚动

javascript - AngularJS 从按钮单击中选择选项卡