首页 > 解决方案 > 在二维数组上使用 Array.map

问题描述

所以我有一个二维数组,想对数组中元素的每个元素使用“randomBool”函数。

“randomBool”函数只返回一个随机布尔值:

const randomBool = () => Boolean(Math.round(Math.random()));

这将是二维数组,我将输入:

var test = [
    ["just","some","random","text"],
    [1412,"test",1278391]
]

在 for 循环中嵌套了一个有效的 for 循环:

for (let el of test){
    for(let i in el){
        el[i] = randomBool();
    }
}

我试过这个:

test.forEach(el => el.map(el2 => randomBool()));

但它没有用。为什么?

标签: javascript

解决方案


您需要使用两个嵌套地图。

const randomBools = test.map(outer => outer.map(inner => randomBool()))

forEach通常旨在迭代每个项目以执行某种副作用而不返回任何内容并且不改变原始数组。例如,将每个项目打印到控制台。

map另一方面,它旨在获取一个数组并返回一个相同大小的新数组,其中值以某种方式转换,而不会改变原始数组。例如,将列表中的所有单词大写。

由于您想从现有的二维数组中返回一个新的二维数组并转换了一些数据,因此您需要嵌套地图函数。这将首先映射到行(外部),然后是列(内部)。内部映射的结果将被收集到外部映射中,您将得到一个包含新值的二维数组,所有这些都无需修改原始数组。


推荐阅读