Store the subscripts of an array where a condition is fulfilled

Hi,

For a 1-D array, I can use Extract/INDX, but for 2-D and 3-D arrays the stored index (1-D) is inconvenient, see the following example.
Thanks!
zh

function where()
make/O/N=(5, 6) judge=p^2-q^2
make/O/N=(5, 6, 3) data1=p+q-r
// *** my question starts here: how to quickly achieve the following results but without looping?
variable i, j, k
For(k=0; k<3; k+=1)
  For(j=0; j<6; j+=1)
    For(i=0; i<5; i+=1)
        data1[i][j][k]= ((judge[i][j]<=8)&&(judge[i][j]>=-8))? NaN : data1[i][j][k]
    Endfor
  Endfor
Endfor
//
// *** my question ends here...
//
// Solution 1, use EXTRACT/INDX, but INDX is 1-D and thus not straightfoward to index data
//
// Solution 2, use question mark ?
//
data1[][][]=((judge[p][q]<=8)&&(judge[p][q]>=-8))? NaN : data1[p][q][r]
//
// then the question is: how to store the subscripts of an array where a condition is fulfilled without making
//  such a judgement every time?
// For example, what if I have data2, data3,...., data100 that would need to satisfy the same condition as data1.
//
// Any other solutions, maybe MatrixOp??
//
End