首页 > 解决方案 > 将两个 forEach 转换为 map

问题描述

如何将这两个循环 forEach 转换为 map 函数?

var storedNames = [1,2,3];
var mod = {id: 3, blocList: [{id:11}, {id:12}]};

storedNames.forEach((item: number) => {
  if (item === mod.id) {
    mod.blocList.forEach((bloc: Bloc) => {
      storedNames.push(bloc.id);
    });
  }
});

结果将是:storedNames = [1, 2, 3, 11, 12]

标签: javascriptarraysforeach

解决方案


这会起作用,但它不是完美使用Array.map(). 理想情况下,如果您想保持storedNames 完整并使用循环所做的更改创建它的副本,您将使用map。如:

modifiedStoredNames = storedNames.map(//do stuff);

据我了解,map 是一种使用作为参数传递的函数对每个元素应用修改的数组副本的方法。在这种情况下,我们只是使用map()循环(准确地说是两个循环)并storedNames根据该循环中的条件更新数组。并忽略地图真正返回的内容。

storedNames.map((item: number) => {
  if (item === mod.id) {
    mod.blocList.map((bloc: any) => {
      storedNames.push(bloc.id);
    })
  }
})

推荐阅读