jquery each 関数を使用して配列をループしています。スプライスを使用して元の配列を変更しているため、実際の配列自体の代わりにループする一時変数を割り当てます。ただし、temp
splice しても変更されているようですarray
。
function example (Data, index, array) {
var temp = array;
$.each(temp, function(i, v) {
if(Data["b"+v].length > index) {
//do stuff
} else {
array.splice(i,1);
}
});
if(array.length > 0) {
example(Data, index+1, array);
}
}
array = [1,2,3,4]
Data = {"b1":[a,b,c,d],"b2":[e,f,g,h], "b3":[i,j], "b4":[k,l,m,n]};
example(Data, 0, array);
example の 3 回目の呼び出しで、temp の 4 回目の繰り返しで v が未定義になるため、次の行で「未定義の長さを読み取れません」というエラーが発生します。これは、が呼び出された直後に発生します。これarray.splice(3,1)
は、temp が配列のコピーではなく、配列と同じ場所を指しているように見えます。
誰でも助けることができますか?