我有一個看起來像這樣的串列
let pixels = [
[0,0,0,0]
[0,0,0,0]
[0,0,0,0]
]
我想遍歷這個串列并為每個專案創建一個相鄰專案的串列。在這個例子中,我想要像素[0][0]的輸出是:[undefined, undefined, undefined, undefined, 0, undefined, 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))
uj5u.com熱心網友回復:
Wheni超出范圍,pixel[i]is undefined, 并且undefined[anything]是一個錯誤。
您可以使用可選鏈接來抑制這些錯誤。
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))
uj5u.com熱心網友回復:
您可以使用 && 來測驗第一個元素是否存在
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))
uj5u.com熱心網友回復:
除了使用可選鏈之外,您還可以使用兩個回圈來生成相鄰坐標,而不是手動寫出每種可能性,這樣更易??于維護。
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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/382216.html
標籤:javascript 数组 列表
