0

私はこれを長くて複雑に書くつもりでしたが、私は単純なアプローチに行くことを考えました。

変数Urlが存在する要素の配列を作成するループがあります。配列は次のようになります。

 x = [url,function(){...},function(){...}];

次に、arrayListに追加します。

 arrayList = [x1,x2,x3,x4,x5];

これまでのところ、それは理にかなっていると思います。arrayListオブジェクトに、1つのvar関数と2つの関数を格納します。

これがキッカーです。

arrayListを反復処理すると、urlはすべて同じになります。これは、arraylistを作成したforloop内のurlへの最後の参照です。

これを解決するための私の試みは、変数名自体ではなく、変数に対して.toString()を実行して、その内容を配列に格納することでした。 それはうまくいきませんでした:(

これを解決するにはどうすればよいですか?私は困惑しました:-(

編集:答えの1つは、配列が不正確にそれを参照していることに関するものだったため、ループがどのように見えるかを示したいと思います

Edit2:問題の原因となっているURLは、以下のdisplayFileの内部URLです。それらはすべて同じ参照を指しているようです。これはnonoです。それらを変更するにはどうすればよいですか?パラメータとして渡す必要がありますか?

var newArray = new Array();
for(var i=0;i<fileUrls.length;++i) {
   var url = fileUrls[i];
   var x = [];//new Array();
   x = [url,
    function(){
       displayFile(url, 'image', null, ft_id, null, null, null, null, !MA.isiOS());
    }, 
    function(e){
    if(DEBUG) console.log('Error creating gallery thumbnail');
    alert('There was a problem creating a thumbnail');
    MA.hideMessage();
    }
];
newArray.push(x);
}
4

1 に答える 1

2

私があなたが持っていると思うのはむしろ:

arrayList = [x,x,x,x,x];

つまり、同じオブジェクトへの多数の参照を含む配列です。その場合、url異なるアイテムのプロパティを見ると、同じアイテムが何度も繰り返されるため、常に同じプロパティを見ることになります。

これは、アレイを再利用してアレイにデータを入力した結果ですarrayList。次に例を示します。

var x = [];
var arrayList = [];
for (int i = 0; i < 5; i++) {
  x[0] = 'url ' + i;
  x[1] = function(){};
  x[2] = function(){};
  arrayList.push(x);
}

解決策は、各反復で新しい配列を作成することです。

var arrayList = [];
for (int i = 0; i < 5; i++) {
  var x = [];
  x[0] = 'url ' + i;
  x[1] = function(){};
  x[2] = function(){};
  arrayList.push(x);
}

編集:

呼び出しで使用されるurl変数displayFileを各反復に固有のものにするには、値をキャプチャするためのクロージャが必要です。

var newArray = new Array();
for(var i=0;i<fileUrls.length;++i) {
  var url = fileUrls[i];
  var x = [];//new Array();

  var f;
  (function(url){
    f = function(){
      displayFile(url, 'image', null, ft_id, null, null, null, null, !MA.isiOS());
    };
  })(url);

  x = [url, f , 
    function(e){
      if(DEBUG) console.log('Error creating gallery thumbnail');
      alert('There was a problem creating a thumbnail');
      MA.hideMessage();
    }
  ];
  newArray.push(x);
}
于 2012-09-27T20:16:02.280 に答える