X



+ JavaScript の質問用スレッド vol.141 +
レス数が1000を超えています。これ以上書き込みはできません。
0001Name_Not_Found
垢版 |
2019/07/05(金) 18:13:28.39ID:j+97lL/8
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください

■規則/推奨ルール
質問者は !slip:vvvvv を名前欄に、その後は「レス番」+!slip:vvvvv
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」から解離した議論はよそでやること。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです

■前スレ
+ JavaScript の質問用スレッド vol.140 +
https://mevius.5ch.net/test/read.cgi/hp/1558249632/
0952Name_Not_Found
垢版 |
2019/09/17(火) 13:28:05.79ID:???
配列は、キーを数値だけに限定したもの

Object を、連想配列・辞書のように使うと、__proto__ というキーでバグるから、要注意!
Haxe では、キーの前に、@ を連結してた

キーがabc なら、@abc にする。
__proto__ なら、@__proto__ になるのでバグらない

ES2015 以降なら、Map を使えばよい
0953Name_Not_Found
垢版 |
2019/09/17(火) 17:46:41.98ID:???
型付きの配列っていつから入ったっけ?
0954Name_Not_Found
垢版 |
2019/09/17(火) 18:16:57.35ID:???
Mapにreduceやfilterがないのはなぜ?
配列にしては低機能過ぎでは?
0955Name_Not_Found
垢版 |
2019/09/17(火) 18:43:41.43ID:???
無くても困らないからです
0957Name_Not_Found
垢版 |
2019/09/17(火) 20:23:13.67ID:???
http://www2u.biglobe.ne.jp/~oz-07ams/2002/ecma262r3/15-4_Array_Objects.html
new MapはES3のArrayにも及ばないんじゃないかな
sort,slice,unshift,concat...etc
配列としては足りない機能がかなりある
0958Name_Not_Found
垢版 |
2019/09/17(火) 20:34:11.67ID:???
>>947 です。
配列用のカッコでも行けるけど使わない方がよいのですね。
forのiと連動させつつ、歯抜けでpushして配列使えたらよいなと
試してみたところでして。

普通にオブジェクトか配列きちんと埋めて使います。
ありがとうございました
0960Name_Not_Found
垢版 |
2019/09/17(火) 22:00:28.65ID:???
>>954
JSの場合後戻りできないので慎重になっているだけ
議論はちゃんと進んでいる
0961Name_Not_Found
垢版 |
2019/09/18(水) 13:40:07.67ID:???
const str = `abc
123`

const lines = str.split( "\n" ); // 配列
console.log( lines ) //=> [ 'abc', '123' ]

1行ずつ処理するのに、上のように、split を使って、一旦配列に入れたのですが、
下のRuby みたいに、配列に入れずに、そのまま1行ずつ処理できますか?

str = <<"EOT"
abc
123
EOT

str.each_line do |line|
line.chomp! # 末尾の改行を削除する
p line
end

出力
"abc"
"123"
0962Name_Not_Found
垢版 |
2019/09/18(水) 16:22:21.37ID:???
str.split('\n').forEach(line => console.log(line))
str.replace(/.+/gm, line => console.log(line))
0963Name_Not_Found
垢版 |
2019/09/18(水) 17:27:38.91ID:???
下の方そんな動作するんだ。意外だ
0964Name_Not_Found
垢版 |
2019/09/18(水) 22:38:26.97ID:???
下で空行処理する場合は適当に変えてね
0965Name_Not_Found
垢版 |
2019/09/19(木) 07:17:22.03ID:???
>>962
> str.replace(/.+/gm, line => console.log(line))

"." を使うなら、mフラグが不要では?
0969Name_Not_Found
垢版 |
2019/09/19(木) 23:29:34.25ID:???
mはなんとなく付けてしまった
0970Name_Not_Found
垢版 |
2019/09/20(金) 01:35:52.57ID:???
ちょっと見ない間に定数宣言もできるようになったんか
0971Name_Not_Found
垢版 |
2019/09/20(金) 02:10:30.22ID:???
>>964
空行も処理するのは、
console.log(str.replace(/^.*$/gm, line => line + ' peropero'))
または、
for (const line of /^.*$/gm) console.log(line + ' peropero')
0972Name_Not_Found
垢版 |
2019/09/20(金) 02:28:18.29ID:9OhScHGM
質問です

let str1 = '庭には二羽鶏がいるオムライス食べたい2日目';
let str2 = 'にわにはにわにわとりがいるおむらいすたべたいふつかめ';

このstr2のテキストから
str1の中の平仮名以外の文字の読み仮名に該当する部分を取り出したくて試行錯誤してます

str1を平仮名とそれ以外に割って
['庭','には','二羽鶏','がいる','オムライス食','べたい','2日目']

str2の先頭から、配列2つ目の「には」が出てくるまでが
配列1つ目の「庭」の読み仮名だ!

という方針でやってみて、上記の例だとうまくいくんですが
indexOfの引数になる平仮名が漢字の読みに含まれてしまうと失敗します

let str1 = '煮蛤には焼酎よりも日本酒';
let str2 = 'にはまぐりにはしょうちゅうよりもにほんしゅ';

これだと、配列2つ目の「には」が、読み仮名となる「にはまぐり」に含まれてしまうので


どうも方針が間違ってる気がしているのですが
なにかうまいやり方はありますでしょうか
0975Name_Not_Found
垢版 |
2019/09/20(金) 06:18:09.57ID:???
>>967,968
お前大丈夫か?
被害妄想も大概にしろ
いつ誰が>>965がおかしいと言った?
0976Name_Not_Found
垢版 |
2019/09/20(金) 06:41:03.69ID:???
>>975
「知ったか」と「無知」にレスアンカーを付けないで、なぜ通じると思ったんだ?
0977Name_Not_Found
垢版 |
2019/09/20(金) 06:58:37.28ID:???
>>972
単純に、漢字とその読み仮名を定義すれば?

"赤色" : [ "あかいろ", "せきしょく" ]

プログラム板のアルゴリズムとか、日本語解析などのスレで聞けば?
0978Name_Not_Found
垢版 |
2019/09/20(金) 07:22:40.81ID:???
>972
漢字部分を.+に置き換えた正規表現でひとつのマッチは
得られると思う。
ただ、受理できる全パターンの列挙とその中から
正解を選び出す手段は別に必要かな。
0979Name_Not_Found
垢版 |
2019/09/20(金) 07:55:43.75ID:???
>>972
漢字と平仮名の対応表なしに正解を導き出すのは不可能

庭にわ二羽庭
にわにわにわにわ

プロクラムには、各々の漢字の「にわ」と「にわにわ」を区別出来ない
全パターンを掲示して、人間に正解を選んで貰うのが次善解
0981972
垢版 |
2019/09/20(金) 12:53:22.10ID:9OhScHGM
>>977-979
あざます
やっぱ無理ですかねー
なんかこう、確実に一致する平仮名は含まれているので
うまーくマスキング出来ないかなーとか思って始めてみたんですが
0982Name_Not_Found
垢版 |
2019/09/20(金) 13:52:27.02ID:???
考えないで脳死回答すると後ろからみていきゃいいんじゃね
0984972
垢版 |
2019/09/20(金) 14:32:09.50ID:9OhScHGM
>>983
あざます
形態素解析は>>972よりも先に思いついて、まず品詞で割ってみたんですが
平仮名化の精度が微妙だったんでですよね…
このアプローチも頑張ってみます
0985972
垢版 |
2019/09/20(金) 16:04:24.35ID:9OhScHGM
>>983
いろいろゴニョゴニョしたんですが
最初は茶筅の形態素解析を使って失敗していたんですが
gooラボの形態素解析APIは品詞分解した結果に読み仮名が付いていました!
これでかなり精度上がりました
ありがとうございました!
0987Name_Not_Found
垢版 |
2019/09/20(金) 18:57:52.46ID:YH5m6cro
>>981
おもしろそうなのでちょっとやってみた。

const kanafuri = (漢字かな混じり文, かな文) => {
const matches = [...漢字かな混じり文.matchAll(/(?<ひらがな>\p{Script=Hiragana}+)|(?<ひらがな以外>[\P{Script=Hiragana}]+)/gu)]
const 行頭の文字種 = matches[0].groups.ひらがな ? 'ひらがな' : 'ひらがな以外'
const 行末の文字種 = matches[matches.length - 1].groups.ひらがな ? 'ひらがな' : 'ひらがな以外'
const ひらがなchunks = matches.filter(({groups: {ひらがな}}) => ひらがな).map(([match]) => match)
const [_, ...よみがなchunks] = RegExp((行頭の文字種 === 'ひらがな以外' ? '(.+)' : '') + ひらがなchunks.join`(.+)` + (行末の文字種 === 'ひらがな以外' ? '(.+)' : ''), 'gu').exec(かな文)
result = ''
for (const {groups: {ひらがな, ひらがな以外}} of matches) {
if (ひらがな) {
// ひらがなのときの処理
result += ひらがな
} else {
// ひらがな以外のときの処理
result += ひらがな以外 + '【' + よみがなchunks.shift() + '】'
}
}
return result
}
0988Name_Not_Found
垢版 |
2019/09/20(金) 19:06:33.56ID:YH5m6cro
>>987
const str1_漢字 = '庭には二羽鶏がいるオムライス食べたい2日目'
const str1_かな = 'にわにはにわにわとりがいるおむらいすたべたいふつかめ'
const str2_漢字 = '煮蛤には焼酎よりも日本酒'
const str2_かな = 'にはまぐりにはしょうちゅうよりもにほんしゅ'
const str3_漢字 = 'あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、' + //5ch制限のため改行
'うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。'
const str3_かな = 'あのいーはとーゔぉのすきとおったかぜ、なつでもにわにつめたさをもつあおいそら、' + //5ch制限のため改行
'うつくしいもりでかざられたもりーおし、こうがいのぎらぎらひかるくさのなみ。'
console.log(kanafuri(str1_漢字, str1_かな))
//=> 庭【にわ】には二羽鶏【にわにわとり】がいるオムライス食【おむらいすた】べたい2日目【ふつかめ】
console.log(kanafuri(str2_漢字, str2_かな))
//=> 煮蛤【にはまぐり】には焼酎【しょうちゅう】よりも日本酒【にほんしゅ】
console.log(kanafuri(str3_漢字, str3_かな))
//=> あのイーハトーヴォ【いーはとーゔぉ】のすきとおった風、夏【かぜ、なつ】でも底【にわ】に冷【つめ】たさをもつ青【あお】いそら、【、】
//5ch制限のため改行
うつくしい森【もり】で飾【かざ】られたモリーオ市、郊外【もりーおし、こうがい】のぎらぎらひかる草【くさ】の波。【なみ。】

、や。の扱いが不服だが疲れたのでここまでにする。
参考:
Unicode property escapes
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes
Unicodeの文字プロパティを指定した正規表現をみてみる(ECMAScript2018)
https://blog.tes.co.jp/entry/2018/06/29/145450
0989Name_Not_Found
垢版 |
2019/09/20(金) 19:44:22.15ID:???
アホみたいにズラズラ書かずにコード投稿サイトに書いてくれ
>>1にも書いてあるだろ

しかもJaneだとインデントもされないし読みにくいことこの上ない
0990Name_Not_Found
垢版 |
2019/09/20(金) 19:55:31.65ID:YH5m6cro
まあもうスレも終わりだしまた今度な。
0991Name_Not_Found
垢版 |
2019/09/20(金) 20:00:14.89ID:???
> また今度な。

絶対やらないパターンな
0992Name_Not_Found
垢版 |
2019/09/20(金) 20:18:23.94ID:YH5m6cro
イーハトーヴォのかな文、誤字ったぜ…
底をにわって書いちゃったんだぜ。
例文1でにわにわうるさいから…
0993972
垢版 |
2019/09/20(金) 20:18:33.26ID:9OhScHGM
まあまあ

>>987
あざます
勉強になりました
0994Name_Not_Found
垢版 |
2019/09/20(金) 23:04:30.94ID:???
インデントが無くなっても、VSCode のフォーマットの拡張機能で、自動的にインデントされるだろ?
0995Name_Not_Found
垢版 |
2019/09/21(土) 00:19:45.06ID:???
5ちゃんに長々と書かれてるコードをいちいちエディタにペーストしないわ
0996Name_Not_Found
垢版 |
2019/09/21(土) 00:25:51.17ID:???
つまり5ちゃんに長々と書くことによって、みんながコードをいちいちエディタにペーストする手間を省いたわけだ。親切!
0998Name_Not_Found
垢版 |
2019/09/21(土) 08:36:46.90ID:???
次スレはどっち使うの?
1000Name_Not_Found
垢版 |
2019/09/21(土) 17:08:00.94ID:???
>>999
形態素解析APIで解決したって言ってんだろうがマヌケ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 77日 22時間 54分 33秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況