2016-04-26 7 views
0

アイテムコードの列との一致に使用されるアイテムコードの配列があるため、一致するセルが見つかると、価格配列から価格にコピーされますカラム。コードは次のとおりです:配列から値をコピーするときにいくつかの値がスキップされる

for (z = 3; z < codearray.length; z++) { 
    for (w = 0; w < orderingValue.length; w++) { 
     if (parseInt(orderingValue[w][codecol]) == parseInt(codearray[0])) { 
      copyrow = w + 1; 
      orderingss.getRange(copyrow, salescol).setValue(pricearray[0]); 
      codearray.shift(); 
      pricearray.shift(); 
     } 
    } 
} 

最初はコードが動作すると思っていましたが、何らかの理由でアイテムコードの一部がスキップされたことがわかりました。私はコードと価格の値が配列に存在することを確認したので、スキップを引き起こす原因がわからない。

編集:私は本当の原因を見つけたかもしれません。私はそれが一致しないcodearrayの項目コードを見つけるとき、それがコピーを停止することに気づいた。一旦アイテムコードを修正すると、すべてがうまくいった。ループを続行する方法や、一致するものが見つからない場合はアイテムコードをスキップする方法はありますか?

+0

下に述べたようにあなたが解決することによって、これを回避することができますか?私はそれが使われているのを見ていますが、決してそれをどこにも定義しませ – amphetamachine

+0

私はお詫びします。コーデックは、照合されるアイテムコードが存在する列番号です。 –

答えて

1

ループ中に配列内の項目を削除するからです。

は、私は次の行に意味

codearray.shift(); 

`codecol`は何

var copiedCodeArray = codearray.slice(); 
for(z = 3;z<copiedCodeArray.length;z++){ 
    // paste the rest of the code here 
+0

私は原因を見つけたと思うが、それを修正する方法がわからない。配列に入れる前に数値でソートすると、すべてがコピーされます。これは、ループが毎回最初からorderingValue全体をチェックしていないことを意味しています。 –

+0

ループを使用してshift()(または配列から要素を削除する他の方法)を使用すると、要素が削除されます。たとえば、要素をインデックス1で削除すると、位置2の要素は左にシフトします現在の反復数は2になるので、そのインデックスは1になり、ループはそれをカバーしません。 –

関連する問題