質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

7798閲覧

【GAS】配列に追加したワードの中で重複している単語を削除したい

ai39

総合スコア7

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2022/12/24 06:26

前提

GASについて、配列に追加したワードの中で重複している単語を削除したい

実現したいこと

配列に追加した文字列(title)の重複している文字列を削除したいです

例)
arrayに追加した単語が「かき、いちご、かき、りんご」だとしたら、
「かき、いちご、りんご」のみを表示したいです

発生している問題・エラーメッセージ

エラーは出ないですが、重複している単語を削除できないです

該当のソースコード

for (var i = 826; i <= lastRow; i++) { var tyohuku = sheet.getRange(i, 4).getValue(); var title = sheet.getRange(i, 1).getValue(); var str_1 = "重複" if (tyohuku === str_1 ) { var array = []; arrayPush = array.push(title); var sample = array.filter(function(value, index, array){ return array.indexOf(value) === index;}); Logger.log(sample);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

配列から重複した値を削除する方法は、丸暗記してしまいましょう。

javascript

1[...new Set(配列)]

解説

javascript

1const sampleArr = ['かき', 'いちご', 'かき', 'りんご']; 2const result = [...new Set(sampleArr)]; 3console.log(result); // ['かき', 'いちご', 'りんご']

Setとは、値のコレクションのオブジェクト{ }です。
またSetの中には重複した値を収納できません。
この特性を利用して、配列をnew Set()してやれば、自動的に重複した値が削除されます。

しかし、Setは配列ではありませんので、作成されたSetオブジェクトを配列に変換してやる必要があります。
そのためにスプレッド構文を利用しています。

javascript

1// Setの例 2const setObj = new Set(['かき', 'いちご', 'かき', 'りんご']); 3console.log(setObj); // {'かき', 'いちご', 'りんご'} 4 5// スプレッド構文の例 6const arr = [...setObj]; 7console.log(arr); // ['かき', 'いちご', 'りんご']

質問者様の提示されているコードが一部のみのため、具体的なコード修正をご提案できない状況ですが、
とにかく[...new Set(配列)]をすればいいです。
ご提示いただいているfor() {}の部分は全部不要だと思います。

実例

スプレッドシートから取得してきた値のうち、重複を削除するコード例です。

イメージ説明

javascript

1function getUniqueValues() { 2 const sheet = SpreadsheetApp.getActiveSheet(); 3 const startRow = 2; 4 const lastRow = sheet.getLastRow(); 5 6 // セルの範囲を取得 7 const range = sheet.getRange(2, 1, lastRow - startRow + 1, 1); // 例)A2〜A5 8 9 // 範囲内の値を一括で取得 10 const values = range.getValues().flat(); 11 // ↑↑↑の解説 12 // スプレッドシートから一括で値を取得すると、通常は2次元配列 13 //  例)range.getValues() ---> [ [ 'かき' ], [ 'いちご' ], [ 'かき' ], [ 'りんご' ] ] 14 // そのため、.flat()で2次元配列を、1次元配列化する 15 //  例)range.getValues().flat() ---> [ 'かき', 'いちご', 'かき', 'りんご' ] 16 17 // 重複した値を削除 18 const uniqueValues = [...new Set(values)]; 19 Logger.log(uniqueValues); // [かき, いちご, りんご] 20}

投稿2022/12/24 16:16

編集2022/12/26 14:25
Cocode

総合スコア2316

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ai39

2022/12/26 12:48

「かき、いちご、かき、りんご」自体は、スプレッドシートから取得したものなので、配列に直接記載ができないため、教えていただいたものでもうまくいきませんでした。
Cocode

2022/12/26 13:35

スプレッドシートから取得してきた値は2次元配列なので、1次元配列に変換する必要があります。 よかったら取得したいセル範囲を教えてください。  正常に動作するコードを書かせていただきます。
Cocode

2022/12/26 14:26

先に、スプレッドシートから取得した値の重複値を削除するコードを書いてみました。ご参考ください。
ai39

2023/01/02 12:47

ありがとうございます!無事できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問