Javascript中的嵌套循环快捷方式?

Javascript中的嵌套循环快捷方式?,javascript,Javascript,在我正在编写的程序中,我有一个多维数组,我只需要对最内部的对象执行一些操作 有没有更好的方法来编写这段代码 for (const threeDimensionalArray of fourDimensionalArray) { for (const twoDimensionalArray of threeDimensionalArray) { for (const oneDimensionalArray of twoDimensionalArray) { for (con

在我正在编写的程序中,我有一个多维数组,我只需要对最内部的对象执行一些操作

有没有更好的方法来编写这段代码

for (const threeDimensionalArray of fourDimensionalArray) {
  for (const twoDimensionalArray of threeDimensionalArray) {
    for (const oneDimensionalArray of twoDimensionalArray) {
      for (const obj of oneDimensionalArray) {
        // do something
      }
    }
  }
}
比如:

for (const obj someSpecialKeyword fourDimensionalArray) {
  // do something
}
注:我知道有一种解决方案使用了展平函数。使用展平函数的问题是,这个迭代将在程序中大量使用,因此我担心性能。即使我将这个多维数组保存为两种格式(平面格式和多维格式),它也可能会导致性能问题,因为这个数组也会发生很多变化,并且会使代码变长

这里最好的方法是什么

我知道有一种解决方案是使用平坦函数

我假设“展平函数”是指一个减缩函数?(不幸的是,JavaScript的
数组.prototype
函数,如
reduce
map
filter
等,在每一步都执行完整的拷贝)

:

这样使用:

for( const item of getAll( fourDimensionalArray ) ) {
    // do something
}

生成器函数非常有效,不会导致数组复制操作。

您可以使用递归函数来获取数组或项,并对非数组进行回调

此功能不依赖于固定结构

function iter(value, cb) {
    if (Array.isArray(value)) {
        for (const item of value) iter(item, cb);
    } else {
        cb(value);
    }
}

数组的实际结构(即正式数据类型)是什么?我假设它是一个锯齿状数组(因为JavaScript不支持真正的多维数组)。您考虑过编写迭代器函数吗?最内部的类型是一个带有attributes的对象a
flatMap
函数是我将使用的,然后迭代所有元素,如果性能是关键的话。。。您确实想用JavaScript解决这个问题吗?请考虑<代码> const ARR=[];arr.push(arr);iter(arr,console.log)这个数组没有地板…“这个数组没有地板”-我不熟悉数组上下文中的“地板”这个词-你能解释一下吗?我的观点是,在处理循环对象图时,您的函数容易出现堆栈溢出。从技术角度讲,数组具有循环引用,无法获取数组的最终项。多亏了您,我今天学到了一些新的东西;我投赞成票
function iter(value, cb) {
    if (Array.isArray(value)) {
        for (const item of value) iter(item, cb);
    } else {
        cb(value);
    }
}