【发布时间】:2017-07-23 19:06:27
【问题描述】:
假设我有一个按照以下代码的多维数组:
var theArray = [
[1, 2, 3],
[3, 2, 1],
[1, 2, 3],
[1, 2, 1]
]
我需要执行一次迭代,根据某些条件改变数字:
- 如果数字 1 下面有一个 3;它转换为“foo”。
- 如果数字 3 上面有一个 1;它转换为“bar”。
- 如果出现 2 对 1 & 3 或 3 & 1 的垂直连续序列,则这些对不会发生突变。
我的问题是,当我使用 forEach() 迭代它时,我最终会在到达下一个数组之前改变当前数组中的数字,因此我使条件无效,因为一旦迭代进入下一个数组;检查失败是因为会有“foo”或“bar”而不是 1 或 2。
所以这样的事情是行不通的:
someArray.forEach((array, index) => {
array.forEach((digit, numIndex) => {
if(someArray[index + 1][numIndex] == 3 && digit == 1) {
array[numIndex] = "foo"
} else if(someArray[index - 1][numIndex] == 1 && digit == 3) {
array[numIndex] = "bar"
}
})
})
因此;我认为必须有一种方法可以“实时检查”这些条件是否同时存在于所有数组中。特别是考虑到需要检查垂直对的最后一个收缩。
预期结果:
var theArray = [
["foo", 2, 3],
["bar" , 2, 1],
[1, 2, 3]
[1, 2, 1]
]
这是如何实现的?
提前感谢您的帮助!
【问题讨论】:
-
不可能
return来自Array.prototype.forEach()的值 -
复制数组。如果这是问题,则迭代一个并改变另一个
-
@guest271314 感谢您指出这一点,我已修复它,这应该是半伪代码,仅作为示例。
-
预期的结果数组是什么?
[ [ "foo", 2, 3 ], [ 3, 2, "foo" ], [ 1, 2, 3 ], [ 1, 2, 1 ] ]? -
感谢您的回复,我已经添加了预期的结果@guest271314
标签: javascript arrays algorithm multidimensional-array