如何检查列表中相邻项目的值? Javascript
Posted
技术标签:
【中文标题】如何检查列表中相邻项目的值? Javascript【英文标题】:How to check values of adjacent items in a list? Javascript 【发布时间】:2022-01-18 01:32:28 【问题描述】:我有一个类似这样的列表
let pixels = [
[0,0,0,0]
[0,0,0,0]
[0,0,0,0]
]
我想遍历这个列表并为每个项目创建一个相邻项目的列表。在此示例中,我希望像素 [0] [0] 的输出是:[未定义,未定义,未定义,未定义,0,未定义,0, 0]。但是当我运行我的代码时,我得到了一个错误
代码无法读取像素[-1][-1],我只想让它读取为未定义,而不是让整个程序崩溃。
let pixels = [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
]
function adjacent(i1, i2)
const yep = [pixels[i1 - 1][i2 - 1], pixels[i1 - 1][i2], pixels[i1 - 1][i2 + 1], pixels[i1][i2 - 1], pixels[i1][i2 + 1], pixels[i1 + 1][i2 - 1], pixels[i1 + 1][i2], pixels[i1 + 1][i2 + 1]]
return yep
console.log(adjacent(1,4))
console.log(adjacent(-1,-1))
【问题讨论】:
你遇到了什么错误? 您无法访问undefined
的[-1]
属性。
如果i1
小于等于1,下面的例子会抛出错误:pixels[i1 - 1][anything]
。尝试一个条件来避免此类问题。
【参考方案1】:
当i
超出范围时,pixel[i]
为undefined
,undefined[anything]
为错误。
您可以使用optional chaining 来抑制这些错误。
let pixels = [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
]
function adjacent(i1, i2)
const yep = [pixels[i1 - 1]?.[i2 - 1], pixels[i1 - 1]?.[i2], pixels[i1 - 1]?.[i2 + 1],
pixels[i1]?.[i2 - 1], pixels[i1]?.[i2 + 1], pixels[i1 + 1]?.[i2 - 1],
pixels[i1 + 1]?.[i2], pixels[i1 + 1]?.[i2 + 1]
]
return yep
console.log(adjacent(1, 4))
console.log(adjacent(-1, -1))
【讨论】:
该死的。我做了 ]?[ 失败了。 @mplungjan 是的,语法不一致。该语法会与三元运算符冲突。 如果我不花时间制作一个有效的 sn-p,我会打败你的 ;) 是的,谢谢你:) 您可以通过投票来感谢我。我的脚本也适用于更多浏览器:)【参考方案2】:你可以使用 && 来测试第一个元素是否存在
let pixels = [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
]
function adjacent(i1, i2)
const yep = [
pixels[i1 - 1] && pixels[i1 - 1][i2 - 1],
pixels[i1 - 1] && pixels[i1 - 1][i2],
pixels[i1 - 1] && pixels[i1 - 1][i2 + 1],
pixels[i1] && pixels[i1][i2 - 1],
pixels[i1] && pixels[i1][i2 + 1],
pixels[i1 + 1] && pixels[i1 + 1][i2 - 1],
pixels[i1 + 1] && pixels[i1 + 1][i2],
pixels[i1 + 1] && pixels[i1 + 1][i2 + 1]]
return yep
console.log(adjacent(1,4))
console.log(adjacent(-1,-1))
【讨论】:
【参考方案3】:除了使用可选链外,还可以使用两个循环来生成相邻坐标,而不是手动写出每个可能性,这样更容易维护。
let pixels = [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
]
function adjacent(i1, i2)
const res = [];
for(let deltaY = -1; deltaY <= 1; deltaY++)
for(let deltaX = -1; deltaX <= 1; deltaX++)
if(deltaY != 0 || deltaX != 0)
res.push(pixels[i1 + deltaY]?.[i2 + deltaX]);
return res;
console.log(...adjacent(1,4))
console.log(...adjacent(-1,-1))
【讨论】:
以上是关于如何检查列表中相邻项目的值? Javascript的主要内容,如果未能解决你的问题,请参考以下文章