2017-10-08 5 views
0

コンテンツが配列内にない場合は、さまざまなセルをループして文字列コンテンツを追加します。私はそうのように手動でそれを行うときには、すでに 『eJobs』をcontaints配列(VAR項目= 『eJobs』」の下を参照)に「eJobs」を追加しようと、完全に正常に動作します:Apps Script JS配列から配列に項目を追加する(配列にまだ入っていない場合)

var divisionarray = ['eJobs'] 
 
    for (var i = 0; i < cells_users.length-1; ++i) { 
 
    var row_users = cells_users[i]; 
 
    if (row_users[0] == user_ldap) { 
 
     
 
     var podarray = row_users[1].split(', ') 
 
     for (j = 0; j < podarray.length; j++) { 
 
     for (var k = 0; k < cells_edit.length; ++k) { 
 
      var row_edit = cells_edit[k] 
 
      if (podarray[j] === row_edit[0]) { 
 
      var item = 'eJobs' 
 
      if (!(divisionarray.indexOf(item) >= 0)) { 
 
       divisionarray.push(item) 
 
       } 
 
      } 
 
     } 
 
     } 
 
     Logger.log(divisionarray)

期待どおり、ログファイルに[17-10-08 19:11:04:111 BST] [eJobs]と表示され、コードが動作し、 'eJobs'が配列に既に追加されていないことが示されます配列。

今、var item = 'eJobs'を範囲の値に変更するとき

var item = sheet_pods_edit.getRange(startRow+k, startColumn+1).getValue();

ログファイルが示すように、コードは、anylongerは動作しません:

[17-10-08 19:14:03:770 BST] [eJobs, eJobs, BestJobs, Vivre Deco, ...

注私は、数千のセルの範囲を持っているので、私は取得重複の多くが追加されました。私は何が欠けていますか?定義された範囲のセルは実際には単一の単語を含む文字列(例: 'eJobs')であることに注意してください。

答えて

1

二eJobsで

[eJobs, eJobs, BestJobs, Vivre Deco, 

..コードが動作していると、ログファイルは、問題が何であるかを表示しているがeJobsの前に空白があるので、最初の値と第2の値にはありません一致。

あなたのデータを見ずに、「単一の文字列だけ」という文字列を使用しないと、テキスト文字列の.replace(" ", "")を使用すると動作します。これは文字列の最初の部分を見つけて削除します。私。 "eJobs"は "eJobs"になります。

このコードはテスト用ですか?スクリプトの中でこのようなメソッドを使うべきではありません。

var item = sheet_pods_edit.getRange(startRow+k, startColumn+1).getValue(); 

が代わりに.getValues()を使用して完全な範囲を取得し、それを反復非常に非効率的になります。

3.

あなたがタイプかどうかを確認する必要がない限り、あなたはif (podarray[j] === row_edit[0])===を使用している理由は、常に==

+0

1.同意するが、私は、後にその文字列を供給するので、私はそのスペースを必要とするを使用角オートコンプリートは、コンマの間のスペースなしでは動作しません。詳細を説明せずにここに貼り付けるのはあまりにも多くのコードです。 2.このラインはテストのためのものではなく、私は効率性に関して懸念していません。それは1秒未満で実行され、私の目的のために十分です。 3. typoですが、アプリスクリプトで==または===を使用すると本当に問題になりません。 – tealowpillow

関連する問題