2017-02-07 9 views
-1

私は一日中頭を叩いてしまいました。私はあきらめました。Googleスクリプト(javascript)unshiftは奇妙な動作を示していますか?

私はソースデータ配列とターゲットデータ配列の両方を受け取る関数を作成しました。それぞれのシート範囲に対応する。

ソース配列からアドレスを抽出し、ビットをモールドして結果をターゲット配列にシフトインし、その後に最上位の要素がポップされるようにしたいとします。私は最初に再帰的アプローチを試みましたが、これによりwhileループに戻りました。問題は、各ループで、アドレスが何らかの奇妙な乗算方法でシフトされることです。私はそれを説明する方法を知らないが、ログをチェックする。

function arrZoekAdressen(strZoekGebied, arrBron, intRij, arrGebiedAdressen, arrActieveStraat) { 
    if (arrActieveStraat == undefined) { 
    arrActieveStraat = ["Geen adressen", "-"]; 
    } 

    //#1 
    while (intRij < arrBron.length) { 
    if (arrBron[intRij][0] == strZoekGebied){ 
     if (arrBron[intRij][2] == arrActieveStraat[0]){ 
     arrActieveStraat[1] += ", " + arrBron[intRij][3] + arrBron[intRij][4]; 
     } else { 
Logger.log(arrGebiedAdressen); 
Logger.log(arrActieveStraat); 
     arrGebiedAdressen.unshift(arrActieveStraat); 
     arrGebiedAdressen.pop(); 
Logger.log(arrGebiedAdressen); 
     arrActieveStraat[0] = arrBron[intRij][2]; 
     arrActieveStraat[1] = arrBron[intRij][3] + arrBron[intRij][4]; 
     } 
    } 
    intRij++; 
    } 

    //#2 
    arrGebiedAdressen.unshift(arrActieveStraat); 
    arrGebiedAdressen.pop(); 
    return arrGebiedAdressen; 
}; 

これらのロガーを使用して生成されたログは、次のようになります。完全に奇妙な配列の内容を確認してください。

第一のループ [17-02-07 07:54:11:181 PST] [[、]、[、]、[、]、[、]、[、]、[、]、[ 、[]、

[17-02-07 07:54:11:181 PST ]、[Geen adressen、 - ]

[17-02-07 07:54:11:182 PST] [[Geen adressen、 - ]、[、]、[、 ]

第2ループ [17-02-07]、[ 07:54:1 1:183 PST] [[Cuyleborg、212,226]、[、]、[、]、[、] [、]、[]、[]、[]、[]、[、] 、[、]、[、]、[、]、[、]]

[17-02-07 07:54:11:183 PST] [Cuyleborg、212、226]

[17- 02-07 07:54:11:184 PST] [Cuyleborg、212,226]、[Cuyleborg、212、 226]、[、]、[、]、[、]、[]、[、]、 [、]、[、]、[、]、[、]、[、]、[、 ]、[、]]

第3のループ [17-02-07 07:54:11:185 PST [Moselborg、10,88]、 [、]、[]、[]、[]、[]、[]、[]、[、] 、[、]、[、]、[、]、[ ]

[17-02-07 07:54:11:185 PST] [Moselborg、10、88]

[17-02-07 07:54:11:186 PST] [[ [Moselborg、10、88]、[Moselborg、10,88]、 [Moselborg、10、88]、[[]、[]、[]、[]、[]、[]、[、 ]、[、]、 [、]、[、]、[、]]

などなど

ソースリストは、次のようになります。

NR CITY Cuyleborg 212

NR CITY Cuyleborg 226

NR CITY Moselborg 10

NR CITY Moselborgあなたが他を期待するので、すべての通りは、アレイ内で一度だけ行われるべきもちろん88

1つの指数を上げるために、すべてのシフトがない通りがあります。

助けてください...

+0

array.pop()配列内の最後の要素を最初の要素から削除します。最初の要素を削除するには、array.shift()を使用します。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift –

+0

これは意味しません。しかし、私は解決策を見つけました:私は間違って考えています:javascriptで配列に変数を代入すると、参照渡しされます。私はこのポスト(スライス)でアドバイスを使用し、今は魅力のように動作します。 http://stackoverflow.com/questions/7486085/copying-array-by-value-in-javascript –

答えて

0

はそれを自分で解決:Javascriptを参照することにより、変数にオブジェクト(税込配列)を渡します。私はCopying array by value in JavaScriptでアドバイスを適用し、今は魅力のように動作します。私はこれを以前の、aaaaaaarrrghhhと考えていたはずです!