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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

受付中

文字列同士の差集合を求めたい

yuki_90453
yuki_90453

総合スコア326

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

3回答

0グッド

1クリップ

266閲覧

投稿2022/10/18 10:23

概要

下記のようなサンプルの値があります。
sampleBの差集合を求めたいです。

const sampleA = '福岡市中央区港' const sampleB = "中央区港1-2-34- 567"

文字列同士なので.filter()やreplace()が考えられると思いますが、どのようにすればいいかわかりません。
何かヒントを頂けませんか?

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

dameo

2022/10/18 14:24

「差集合」ではなく「差分」ではないでしょうか? '福岡市中央区港' - "中央区港1-2-34- 567"という差集合であれば、「'福岡市中央区港'」が正解だと思います。 '福岡市中央区港'と"中央区港1-2-34- 567"の差分であれば「'福岡市中央区港'のみにある"福岡市"と"中央区港1-2-34- 567"のみにある"1-2-34- 567"の2箇所」が正解ですね。 また仮に文字列ではなく、文字の集合であるとするなら、文字の順序は考慮されなくなるので、要件に合いません。 意図した正解が伝わるように質問を書き直すべきだと思いますよ。

回答3

0

質問の主旨としては、こういうことかなと思いました。


2つの文字列

javascript

1const sampleA = '福岡市中央区港' 2const sampleB = "中央区港1-2-34- 567"

が与えられる。これらを単純に sampleA + sampleB で結合してしまうと、
福岡市中央区港中央区港1-2-34- 567
となってしまい、中央区港 が繰り返されてしまう。そこで この繰り返し部分の 中央区港sampleB から除去した 1-2-34- 567 を得たい。


上記のようなお題であるとして回答しますと、まず与えられる2つの文字列 sampleA および sampleB には含まれない何らかの区切り文字を決めます。例えば : (コロン) とすると、以下によって diffB に 文字列 1-2-34- 567が得られます。

javascript

1const str = `${sampleA}:${sampleB}`; 2const regexp = /(.*):\1(.*)$/; 3 4const diffB = regexp.exec(str)[2]; 5 6console.log(diffB); // '1-2-34- 567'

また、同じ正規表現を使って福岡市中央区港1-2-34- 567を得るには、以下のようにします。

javascript

1const concatABWithoutCommonPart = str.replace(regexp, (_, p1, p2) => `${p1}${p2}`); 2 3console.log(concatABWithoutCommonPart); // '福岡市中央区港1-2-34- 567'

補足

配列を集合とみなして、2つの配列が表す集合の差集合に相当する配列を得るときに、lodash の difference が便利です。これを使って、以下

では、MDN英語版のjavascriptの説明の冒頭文 JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions. から母音に相当するアルファベットを除去した文字列を作っています。

投稿2022/10/18 11:52

編集2022/10/18 12:42
退会済みユーザー

退会済みユーザー

総合スコア0

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

js

1const A = '福岡市中央区港' 2const B = "中央区港1-2-34- 567" 3 4const C = [...B].filter((val) => ![...A].includes(val)) 5console.log(C) 6
[ '1', '-', '2', '-', '3', '4', '-', ' ', '5', '6', '7' ]

投稿2022/10/18 11:00

編集2022/10/18 11:02
ozwk

総合スコア13053

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

diff

1- 福岡市 2中央区港 3+ 1-2-34- 567

部分一致する範囲を1文字ずつシフトして検索すればいいのではないででしょうか。

  1. 中央
  2. 中央区
  3. 中央区港

投稿2022/10/18 10:50

think49

総合スコア18033

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。