JavaScript の質問用スレッド vol.125at TECH
JavaScript の質問用スレッド vol.125 - 暇つぶし2ch2:デフォルトの名無しさん
22/08/07 15:59:57.05 TS5TGpUB0.net
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 URLリンク(plnkr.co) URLリンク(jsbin.com) URLリンク(jsfiddle.net) URLリンク(ideone.com)
■次スレの立て方
本文一行目に「!extend:checked:vvvvvv:1000:512」と書いて、>>1-5のテンレの「前スレ」「関連スレ」を最新化して立ててください。
■JavaScriptスレの現状
元々はWeb制作板が本スレでしたが、ライブラリ信者に荒らされ、プログラム板に避難所として本スレが立てられました。
Web制作板の本スレは荒らされてから次スレが立っておらず、重複スレの消化のみとなっています。
実質的に本スレは存在しない為、質問者はWeb制作板、ブログラム板のどちらのスレで質問しても問題ありません。

3:デフォルトの名無しさん
22/08/07 16:02:05.65 TS5TGpUB0.net
■関連スレ(Web制作板)
JavaScript の質問用スレッド vol.126 (重複スレの消化)
スレリンク(hp板)
JavaScript ライブラリ総合質問所 vol.5
スレリンク(hp板)
jQuery 質問用スレッド vol.7
スレリンク(hp板)
■各種仕様
◆ECMAScript
URLリンク(bclary.com) (ECMAScript 3 HTML版)
URLリンク(www2u.biglobe.ne.jp) (ECMAScript 3 和訳)
URLリンク(262.ecma-international.org) (ECMAScript 2022)
◆HTML Standard (HTML5)
URLリンク(www.whatwg.org) (HTML Living
Standard)
URLリンク(momdo.github.io) (HTML Living
Standard日本語訳)

4:デフォルトの名無しさん
22/08/07 16:05:31.17 TS5TGpUB0.net
テンプレここまで。
テンプレは前スレ、前々スレを元に、よくある議論(Web制作板へ誘導云々)を独断で追加した。
問題があれば、修正案を提案して頂ければ。

5:デフォルトの名無しさん
22/08/07 16:08:52.26 GMB7hjKM0.net


6:デフォルトの名無しさん
22/08/07 17:10:09.37 r7YsBDkd0.net
> Javascript はweb制作管理板、CGI はWEBプログラミング板へ。
これは?

7:デフォルトの名無しさん
22/08/07 17:57:12.51 TS5TGpUB0.net
>>6
プログラム板のローカルルールか
「今ではNode.jsもあるし、JavaScriptはWeb制作言語に限定されないよね」を理由にプログラム板に立てられた、と記憶してる
Node.jsスレを関連スレに入れるべきだった
【非同期】node.js part.1【javascript】
スレリンク(tech板)

8:デフォルトの名無しさん
22/08/08 23:23:18.64 RzP/TMnO0.net
この板のJavaScript スレは、
web制作管理板が荒らされた時に、緊急避難用として立てられたもの
もう、この板でやる必要はない。
web制作管理板の方へ移動すべし!
全く、HTML, jQuery などに関係ない、
Node.js でも扱うなら、この板でも良いけど、
基本、Ruby on Rails などのフレームワークは、WEBプログラミング板

9:デフォルトの名無しさん
22/08/10 07:14:35.84 vRPAjQH+0.net
>>8
本スレがなく、ライブラリ信者が健在なWeb制作板に移動する理由はないと思う

10:デフォルトの名無しさん
22/08/10 10:46:13.57 j9H+Z2W1r.net
>>8はRubyを引き合いに出す件の荒らしだから気にしなくていい

11:デフォルトの名無しさん
22/08/14 02:20:20.36 /Eqen91K0.net
🦏

12:デフォルトの名無しさん
22/08/18 14:56:28.79 ZVXdu8CF0.net
ローカルのhtmlファイル内に記載してるjsで位置情報取得するコードを書いてるのですが、
毎回位置情報を尋ねられてしまいます。
webサイトのページなら位置情報の使用許可を一度設定すれば、そのサイトでは次から尋ねられなくなりますが、
ローカルのhtmlファイルを開いても同様に永続的に位置情報の使用を尋ねられないようにする方法はありますか?
ブラウザはchrome使ってます。

13:デフォルトの名無しさん
22/08/18 15:27:03.90 qt1eMpHHa.net
URLリンク(support.google.com)
URLリンク(support.google.com)

14:デフォルトの名無しさん
22/08/18 15:28:26.33 qt1eMpHHa.net
あとは https にしてみたらどうか
atmarkit.itmedia.co.jp/ait/articles/1605/13/news038.html

15:デフォルトの名無しさん
22/08/18 15:37:16.04 P/iDblewM.net
file:はともかくhttp:にも機能制限かけるのは逆効果だと思う
クラウド売りたい一心なのだろうけどオレオレ証明書が増えてかなわんよ

16:デフォルトの名無しさん
22/08/18 19:42:08.69 FZFlEvPV0.net
そもそもwebアプリ作るなら仮想環境なり、dockerなりで開発環境を作った方が良いかと

17:デフォルトの名無しさん (ワッチョイ cb01-gduT [60.151.253.164])
[ここ壊れてます] .net
すんませんjQueryの質問なんやけど
eachでliタグの子要素のimgタグを取得してalt属性を追加して値はliタグの子要素のemタグのテキストにしたいんだが

全部のliタグの子要素のemタグのテキストを追加してしまう
対応するliタグの子要素のemタグのテキストをそれぞれ追加したいんや!
おせーてくれ!!たのんます!!

18:デフォルトの名無しさん
22/08/18 21:48:22.57 J6oxun4X0.net
>>17
スレ違い
>>3のjQueryスレへ誘導

19:デフォルトの名無しさん
22/08/19 12:26:38.67 l81SyMmZ0.net
jQuery の質問は、web制作管理板の方へ書き込んでください
確か、jQueryのスレがあったと思う。
無ければ、JavaScript のスレへ

20:デフォルトの名無しさん
22/08/19 13:26:53.16 v8JNzl630.net
japascriptは難しい。
初心者はまずはRubyから始めること
そしてRuby on Railsを習得する
javascriptyとjQueryはその後で良い。
こっちのスレで質問すれば親切な達人プログラマーがどんな質問にも懇切丁寧に答えてくれる。
 ↓
Ruby 初心者スレッド Part 67
スレリンク(tech板)

21:デフォルトの名無しさん
22/08/19 18:14:31.50 KbHvsoqL0.net
clickのタイミングについて
<input type="button" value="クリック" id="bt">
let aaa=0;
setInterval(
function(){
aaa=100;aaa=200;aaa=300;aaa=400;aaa=500;
},0
);
document.getElementById("bt").addEventListener(
"click",
function(e){alert(aaa);}
);
何回クリックしても500と表示されるけど500以外が表示されることはないんでしょうか?
aaaが200のときにクリックが割り込むとかはないんですか?

22:デフォルトの名無しさん
22/08/19 18:41:35.47 hN4Icouo0.net
>>21
タイマー処理の関数呼び出しの途中でイベントハンドラが処理されることはない

23:デフォルトの名無しさん
22/08/19 18:53:07.56 KbHvsoqL0.net
>>22
どうもです
タイマー以外のfunctionでもfunctionの途中でイベントハンドラが呼び出されることはないってことですか?

24:デフォルトの名無しさん
22/08/19 21:41:37.23 PiTy7UnQ0.net
JavaScriptは基本シングルスレッド
関数の実行途中に別の関数の処理が割り込んでくるようなことはない

25:デフォルトの名無しさん
22/08/19 23:29:36.47 icsyH/kW0.net
>>23
非同期処理が混在していなければ、ない

26:デフォルトの名無しさん
22/08/20 10:52:07.09 y/gx0kbE0.net
Wan、Lanどちらからもアクセス可能なWebサーバーで
アクセス元がどっちなのかを判断する方法はありますか?

27:デフォルトの名無しさん
22/08/20 11:45:31.91 ThG9yriU0.net
>>26
送信元アドレス見ればよくね?

28:デフォルトの名無しさん
22/08/20 12:02:01.28 tDO3e6hW0.net
サーバーで判断すべきだろう
クライアントで知りたいならサーバーに聞けばいい

29:デフォルトの名無しさん
22/08/20 12:48:23.28 y/gx0kbE0.net
確かにそうですよね
サーバー側で何とかしてみます

30:デフォルトの名無しさん
22/08/21 00:53:25.42 aTZvlMved.net
ナンセンスな質問かもしれませんが、JavaScriptにおいて関数はデータ型としてオブジェクトであり、一方でオブジェクトはプロパティとメソッドの集まりであると説明されています。
関数とオブジェクトはどちらが先に定義されているのでしょうか?

31:デフォルトの名無しさん
22/08/21 07:04:02.83 D11cwWL50.net
>>30
「先に定義」とは、どのような意味?

32:デフォルトの名無しさん
22/08/21 10:31:51.96 3ESrn3ezd.net
>>31
先に存在しているとか先に実装されている(?)というようなイメージです

33:デフォルトの名無しさん
22/08/21 10:42:02.01 KqCcLvyW0.net
>>30
定義が無限循環してると言いたいんだろうけど広辞苑にだってそういうのはあるし、関数ノットイコールメソッドと考えれば矛盾はしてない
たぶんオブジェクトが先だろうけどね

34:デフォルトの名無しさん
22/08/21 11:25:21.77 df/SIE01d.net
>>33
ありがとうございます
もう少し調べてみると、 URLリンク(tc39.es) でTerms and Definitionsのところに、関数はオブジェクトであってプロパティの他に実行可能なコードと状態を持つもの、という感じのことが書かれてて、メソッドはオブジェクトのプロパティの値である関数のことと書かれていました
こちらの説明で一旦納得できました

35:デフォルトの名無しさん
22/08/21 11:46:37.18 j3ukytx2a.net
v8のソースでも読んでみれば

36:デフォルトの名無しさん (ブーイモ MM8b-mKyu [133.159.148.135])
[ここ壊れてます] .net
オブジェクトが先
オブジェクトはプロパティのコレクション

プロパティとはkey/valueのペアのこと
keyはStringでvalueはプリミティブかオブジェクト

37:デフォルトの名無しさん (ブーイモ MM8b-mKyu [133.159.149.74])
[ここ壊れてます] .net
オブジェクトを定義するのにオブジェクトを使ったりStringという別のオブジェクト使えるの?
と疑問に思うのかもしれないけど
定義が存在する(名前解決可能である)ことを確認するフェーズと
定義の中身を検証するフェーズを分けることで可能

foo関数の中でbar関数を呼び出しつつ
bar関数の中でfoo関数を呼び出すような関数定義ができるのと同じこと

38:デフォルトの名無しさん (ワッチョイ d501-dbST [60.87.221.16])
[ここ壊れてます] .net
>>32
「実装」というが、「仕様」上で両方とも存在しているなら、同時に「実装」されるのでは?

>>34
ES3には「オブジェクト」の定義はあるが、「関数」の定義はない
故に「歴史的にはオブジェクトが先に定義された」といえなくもないが、そんな回答を望んでいるようにも見えない
URLリンク(www2u.biglobe.ne.jp)

参考になるかわからないが、typeof演算子は「[[Call]] を持つObject型」の場合に "function" を返す
URLリンク(262.ecma-international.org)

39:デフォルトの名無しさん
22/09/02 16:08:14.77 anBQQFEld.net
ブックマークレットのスレッドかこちらか悩みましたが質問なのでこちらでご相談させていただきます。
他者のWebサイトを閲覧する際、JavaScriptを用いて作成されている場合、リンクを新しいタブで開けない場面があります。
頻繁にページを進んだり戻ったりする場面、可能であればリンク先を別タブで開くようにしたいです。
ブックマークレットを用いて、現在ページのJavaScriptのリンクを別タブで開くように書き換える処理をすることは可能でしょうか?

40:デフォルトの名無しさん
22/09/02 16:38:05.47 avuNeQJi0.net
>>39
そのサイト次第かな
クリックした後の画面を一発で開けるURLが用意されてたら基本的に実装できると思う

41:デフォルトの名無しさん
22/09/03 00:11:31.61 8AM/s+hA0.net
連想配列から特定のキーを検索して、重複がないもののみ取り出した配列を取得したいのですが、
このコードだと速度的に問題がありました。何か良い方法があったら教えていただけないでしょうか
const a= [
{'id': 1, 'category': 'animal', 'kind': 'dog'},
{'id': 2, 'category': 'fruit', 'kind': 'apple'},
{'id': 3, 'category': 'fruit', 'kind': 'orange'},
{'id': 4, 'category': 'animal', 'kind': 'dog'},
{'id': 5, 'category': 'animal', 'kind': 'cat'},
{'id': 6, 'category': 'fruit', 'kind': 'grape'},
]
var b=a.filter((x,y,z)=>z.slice(0,z.length).filter(w=>w.kind==x.kind).length==1);
console.log(b);

42:デフォルトの名無しさん
22/09/03 02:15:20.35 Wm/0iruN0.net
>>41
const buckets = a.reduce((buckets, current) => {
if (!buckets[current.kind]) {
buckets[current.kind] = [current];
} else {
buckets[current.kind].push(current);
}
return buckets;
}, {});
const b = Object.values(buckets)
.filter((items) => items.length === 1)
.flat();
速度は測ってないけどたぶんO(n^2)→O(n)になって速いはず

43:デフォルトの名無しさん
22/09/03 03:34:12.57 E5gjC2rTd.net
Mapで似たようなこと考えてた

44:デフォルトの名無しさん (ワッチョイ 3501-bBdM [126.94.243.226])
[ここ壊れてます] .net
>>41
要素数や重複要素のばらつき具合によって結果は変わるが、最終的には力業が最速な事が多い
URLリンク(jsfiddle.net)

極端な結果になっているのは重複要素がすぐそばにあり、while文による検索ですぐに見つかる為だ
重複要素が遠い位置にあるなら、while文による検索が遅くなるケースも十分にある

>>41のコードが比較的高速なのも重複要素が比較的近くにある為だ
Object.valuesやArray#filterによる変換コストが検索コストより高くついているので、他のコードが比較的遅い

重複検知が頻繁に発生するようであれば、データのも持ち方を new Map や new Set を使うように変更した方がいい
配列はユニークな値を得るのに向いていない

45:デフォルトの名無しさん (ワッチョイ 3501-bBdM [126.94.243.226])
[ここ壊れてます] .net
>>44の補足
jsfiddleのconsoleはconsole.time()を実装していないようだ
ベンチマーク結果はブラウザのコンソールで確認する必要がある

46:デフォルトの名無しさん (ワッチョイ 3501-bBdM [126.94.243.226])
[ここ壊れてます] .net
すまん
>>44のwhile_loopは期待通りに動かないので忘れてほしい(console.assert()のコードをミスって気づかなかった)
重複要素のばらつき具合によるが、(>>41の配列においては)暫定最速は>>41

47:デフォルトの名無しさん
22/09/03 10:46:53.92 RJZpwhgn0.net
>>46
console.assert()の修正、重複チェックをkindのみに修正したら、mapが最速になった
URLリンク(jsfiddle.net)

48:デフォルトの名無しさん
22/09/03 11:16:26.73 RJZpwhgn0.net
>>47
高速化で考えるべきは「ループ回数の削減」と「変換回数の削減」
>>41 source
>>42 reduce
>>47 map
reduceはループ回数は削減されているが、変換回数がsourceよりも多い
要素数6では「変換コスト > 検索コスト」になってしまい、sourceよりも遅い
要素数192では「変換コスト < 検索コスト」となるので、sourceよりも速い
mapの変換回数は2回で Array.from() と results.values() のみ
ループ回数、変換回数ともにsource,reduceよりも少ない
要素数6、要素数192のいずれも map が最速となる
実際のところ、変換を一度も発生させないコードが理想となる
データの持ち方として配列(new Array)であるべきなのか、はよく考えた方がいい

49:デフォルトの名無しさん
22/09/03 11:42:14.57 RJZpwhgn0.net
>>39
a要素でマークアップされているなら、難しくはない
for (let a of document.querySelectorAll('a[href]')) a.target = '_blank';
window.open()などでリンクを開く挙動もJavaScriptで制御しているなら、コードを読んでリンク先を得る手段を考える必要がある

50:デフォルトの名無しさん
22/09/04 09:22:10.61 eAq4eNQY0.net
>>40
>>49
ありがとうございます。
テーブルの表示となっていて、行全体にリンクが設定されているようです。
以下のような記載が複数並んでおり、通常は左クリックでリンク先に移動しかできず、新しいタブで開くことができません。
<tr class=”〇〇〇” data-href=”★リンク先アドレス★” data-target=”〇〇〇”>
<td class=”〇〇〇”></td>
<td class=”〇〇〇”></td>
</tr>
素人ながらいくつかブックマークレットで試したのですが、逆に実行するとリンクが無効になる事が多々でした。
アドバイスをいただければ幸いです。

51:デフォルトの名無しさん
22/09/04 12:38:54.82 FoFuUBY00.net
<div style="width:100%;height:200px;border:Solid 3px #0000ff" id="test"></div>
これのcss初期設定を取得したいのでstyle="○○"の○○部分を抽出したいんだけどやり方がわかりません。
element.style.widthみたいに取得すると途中で値を書き換えられると初期設定が得られないので
最初にタグに埋め込んであるものを取得したいんです。

52:デフォルトの名無しさん
22/09/04 20:07:02.96 KWOOnIlI0.net
getAttributeとか?

53:デフォルトの名無しさん
22/09/04 20:23:24.42 FTTWPGH/0.net
element.style.hoge=fugaしたらstyle属性値も連動するんだから
書き換える前に取得しとくしかなくね?

54:デフォルトの名無しさん
22/09/04 21:15:03.99 SMoCQy1h0.net
>>51
・直後にscript書いて書き換え前にstyleを取得しておく
・Fetch APIでhtmlをGETしてCSPでscript無効化してparseしてstyleを得る

55:デフォルトの名無しさん
22/09/04 22:38:54.08 FoFuUBY00.net
>>52-54
ありがとうございました

56:デフォルトの名無しさん (ワッチョイ d52c-6nWD [180.52.202.152])
[ここ壊れてます] .net
>>50
開発者が、どのフレームワークを使っているのか分からないけど、
例えば、Ruby on Rails, Stimulus を使っているなら、

[Rails]Stimulusを使ってtableの行全体<tr>をリンクにする(jQuery不要)
URLリンク(zenn.dev)

これのhref_controller.js に、

export default class extends Controller {
toHref(event) {

// 既定の動作を取り消す
event.preventDefault()

// data-href 属性に入っている、URL を取得する
const href = event.currentTarget.dataset['href']

// URL を設定する
window.location.href = href
}
}

57:56
22/09/04 23:14:48.88 9ocqxCfk0.net
>>56
// URL を設定する
window.location.href = href
みたいに直接、window.location.href に設定しているけど、
この場合、Ctrl + クリックや、
右クリックメニューから新しいタブで開くことは出来ないのかな?

58:デフォルトの名無しさん
22/09/04 23:26:45.19 RdtW7bNN0.net
>>50
遷移する時にdata-targetが使われることを見込んでこれでいけるかもね
for (let tr of document.querySelectorAll('tr.〇〇〇')) tr.dataset.target = '_blank'
※〇〇〇はtrのクラス名で

59:デフォルトの名無しさん
22/09/05 18:27:01.95 XvLqNcU6H.net
document内の要素で、textContentに'xxx'を持つクラスを取得するにはどうしたらいいですか?
全部の要素総当たりでtextContent調べるしかないんでしょうか?

60:デフォルトの名無しさん
22/09/05 18:51:10.83 ng2JfbNn0.net
>>50
JavaScriptコードが不明なので正確な回答は不可能
>>58の想定通りなら、おそらくその実装が一番楽
tr要素ノードにclickイベントハンドラでwindow.openする実装と仮定して、下記実装が考えられる
1. elementdataset.hrefでリンク先アドレスを得る
2. createElementでa要素ノード生成
3. replaceChildで(A)のDOMになるよう調節
4. tr要素ノードの仕掛けられたであろうclickイベントハンドラをevent.stopImmediatePropagation()で封印
(A)
<tr class=”〇〇〇” data-href=”★リンク先アドレス★” data-target=”〇〇〇”>
<td class=”〇〇〇”><a href=”★リンク先アドレス★”></a></td>
<td class=”〇〇〇”><a href=”★リンク先アドレス★”></a></td>
</tr>
window.open()なんてレガシーコード書きたくないからあえて


61:a要素を使っているが、 イベントを横取りできるなら、既存イベントハンドラと同じコードにしても良い



62:デフォルトの名無しさん
22/09/05 19:18:18.86 ng2JfbNn0.net
>>59
XPath式を使えば、textContentを使わなくて済む
URLリンク(jsfiddle.net)

63:デフォルトの名無しさん
22/09/05 19:25:28.71 ng2JfbNn0.net
>>61
テキストノードを子に持つ要素ノードを捕捉するコードにすればよかった
URLリンク(jsfiddle.net)

64:デフォルトの名無しさん (アウアウウー Sa69-QaXK [106.129.180.164])
[ここ壊れてます] .net
プログラミング初心者でJavaScriptを勉強してます。
メンバ変数A、メソッドBを持つクラスがあり、メソッドBの中で変数Aを活用(Aを用いた処理やAの変更)したいのですが、
Aを引数としてBに渡して返り値として受け取るのと、Bの中で直接this.Aと記述して処理するのは何か違いがありますか?
メソッドBに別の変数を渡す可能性があるなら前者でないといけないのでしょうが、そうでなければ後者の書き方でよいでしょうか?

65:デフォルトの名無しさん (ワッチョイ 6501-vbgY [60.85.61.123])
[ここ壊れてます] .net
>>63
this.Aは全てのインスタンスメソッドで参照できる
this.Aはインスタンスを参照可能なスコープ上で参照可能

仮引数AはメソッドBの関数スコープ外から参照不可能

66:デフォルトの名無しさん
22/09/07 19:11:15.04 8NMkvrFG0.net
Ruby で書くと、
initialize は、constructor
class A
def initialize
@x = 0
end
def f_1
@x = 1
end
def f_2( num )
@x = num
end
end
p a = A.new #<A: @x=0>
a.f_1
p a #<A: @x=1>
a.f_2( 2 )
p a #<A: @x=2>

67:デフォルトの名無しさん
22/09/07 19:17:44.81 GIiuva0od.net
>>64
それ何にも疑問の解決になってないだろう

68:デフォルトの名無しさん
22/09/07 20:26:24.25 LU0OXBc/0.net
>>66
↓のsetAとcalcAの違いを聞いてるんじゃないのか?
class Foo {
constructor (a) {
this.A = a;
}
setA (a) {
this.A = calc(a);
}
calcA (a) {
return calc(a);
}
}
わかっているらしいあなたが回答すれば済む話だが

69:デフォルトの名無しさん
22/09/08 00:18:00.64 rIQlC2lz0.net
すいません。以下の様な状況でfuncCからfuncBまたはB'が呼ばれる状況を考えていました。B'のほうが楽な気がして。そもそも意味不明な質問だったら申し訳ないです…
```
class Foo{
varA; // varAの値はよそから取得
funcB (a){
//aに対する処理
return a;}
funcB' (){
//this.varAに対する処理
}
funcC(){
ans = funcB(this.varA);
または
funcB'();
ans = this.varA;
}
}

70:65
22/09/08 07:17:36.21 eI1uoUaK0.net
Ruby では、>>65
に書いたように、
def f_1
@x = 1
end
みたいに、クラス内のインスタンスメソッド・f_1 内で、
インスタンス変数・@x を使えるので、一々、引数で渡す必要がない

71:デフォルトの名無しさん
22/09/08 19:40:45.35 6QKcdu8L0.net
オブジェクト指向の一般的な話としては、クラス内の関数であればクラス内のメンバはいじっても問題ないと思う。
ただ、「どこの関数がこのメンバを触ってるのかわからない」ってほどクラスが巨大化するなら、もはやそれはたちの悪いグローバル変数そのものなので設計からおかしい。

72:デフォルトの名無しさん
22/09/08 22:51:00.93 D/mmzJCP0.net
>>68
一つ一つのコードの意味を理解して、一つ一つのコードでなぜをそれを使うのか、と自問して答えを出せば、自ずと答えが出てくる
質問していない部分で突っ込みどころが多すぎて、「何も考えてないんだな」と思わせられる
URLリンク(jsfiddle.net)
・なぜ 全ての関数は返り値を持たないのか?
・なぜ Foo1#funcB は静的関数ではないのか?
・なぜ Foo1#funcC,Foo2#funcC は返り値ではなく、グローバル変数に演算結果を格納したのか?
・なぜ Foo2#varA の初期化にコンストラクタの引数を使わないのか?
こういう質問全てにこたえられるぐらいに考えられないと良いコードはかけない
URLリンク(jsfiddle.net)
・可能な限り、変数のスコープはせまくあるべき
・可能な限り、関数は参照透過性を持つべき
今後、インスタンスプロパティを拡張する予定があるならclassを使うべきだし、そうでないなら静的関数で十分
>>64で示した挙動の違いだけで十分に判断できる

73:デフォルトの名無しさん
22/09/08 23:10:43.06 DGEh14TYr.net
それがプログラミング初心者に投げつける言葉かよ・・・
そういう知識や判断力もゆくゆくは必要だけども物事には順序ってもんがあってまだその域ではなかろう
マウントが取りたいだけならもっと近いレベルの相手にやんなよ

74:デフォルトの名無しさん
22/09/08 23:23:08.03 xrpQvLAzM.net
>>63
いいと思うよ
というかBに汎用性を持たせるのは微妙

75:デフォルトの名無しさん
22/09/09 09:56:50.51 Rq87TVpoa.net
this.Aで書いた方が手っ取り早いことが多い気がしたのですが、そちらでもいいけどスコープに注意しないとバグの要因になる、グローバル変数を濫用しないようにというのと相似形の似たような話という認識でいいでしょうか。
下手したら必然性なく両者を混在させてしまったりしそうなので注意したいと思います。参照透過性とか言葉自体知りませんでした…
参考になりました。ありがとうございます。

76:デフォルトの名無しさん
22/09/09 11:06:49.13 hB1+BppPd.net
>>74
今は>>70の理解でいいと思うよ
今の時点であまり詰め込んでもしょうがないし
>>71みたいなののせいで萎縮しないでね

77:デフォルトの名無しさん
22/09/09 19:12:54.25 0zkp1JmC0.net
>>72
> 物事には順序ってもんがあってまだその域ではなかろう
順序が大切なことには同意
ダメ出しがたくさんあるのは「学習の順序」が間違っているから
いろいろと学習を飛ばしてコードを書いており、その質問をする域に達していない
初心者だからこそ、もっと基礎的な課題から取り組むのが現実解だと俺は思う
今までの受け答えを見る限り、付け焼刃で知識をつけているように俺には見える
> マウントが取りたいだけならもっと近いレベルの相手にやんなよ
マウントを取りたいわけじゃない

78:デフォルトの名無しさん
22/09/09 20:14:57.93 n8dQNxep0.net
だから、オブジェクト指向とかプログラミングは、Ruby から始めるべき。
JavaScript(JS)みたいなややこしいもので、デザインパターンを学ぶべきではない
改訂2版 Ruby逆引きハンドブック
の1冊だけで、かなりのモジュール・ライブラリの使い方も分かる
同じページ数でも、JSなら、文法だけで終わる。
20年以上のJSの歴史を追っかけて行くから、文法だけでもRubyの5倍ぐらいある
だから、こういう言語へ手を出したらダメ。
Rubyist は、JSなどをコピペで済ます。
深い所までやらない。分量的に切りがない

79:デフォルトの名無しさん
22/09/10 00:48:49.86 1NdnS3vZ0.net
学習の順序とか提示せずに「何も考えてない」と切り捨てるのはマウンティングに入らないんですか?

80:デフォルトの名無しさん
22/09/10 06:13:53.00 Cpvx7Vnj0.net
回答者相手にマウントとってる人に真面目に答えるだけ無駄か
そんな暇があったら、質問者に回答すればいいのに

81:デフォルトの名無しさん
22/09/10 09:58:22.29 aLnVTfHzr.net
君は高圧的な正しさで初心者を殴ってるだけ
人にものを教えるのには向いてないと思うよ

82:デフォルトの名無しさん
22/09/10 11:01:57.14 Cpvx7Vnj0.net
>>80
5chはそういうものと思っていたが、それがこのスレの流儀なら気を付ける
だが、回答者に高圧的だったり、回答者にマウントをとる人も是正されるような公平な世界であってほしいね

83:デフォルトの名無しさん
22/09/10 11:48:27.08 DabBJhVCr.net
具体的にどの発言に対して言ってるのかわからんけど
そういう何か言い返さないと気がすまないって気持ちは心の中にしまっておいた方がいいんじゃないかな

84:デフォルトの名無しさん (スップ Sd33-A6fq [49.97.111.223])
[ここ壊れてます] .net
自分の過ちを認めると負けたみたいでプライドが傷つくから
俺も悪かったけどお前らも悪いから引き分けだよねということにしたい心理の表れ

85:デフォルトの名無しさん
22/09/11 20:15:23.24 yDUj5jeF0.net
元の配列を関数内で空にしたいけどうまくいきません
100と表示されてしまったので空になっていませんでした。
配列は参照渡しなので元の配列も書き換えられると思ったんだけど
どうやれば関数内で元の配列を空にできますか?returnは使いたくないです。
let a_list = [100,200,300];
test(a_list);
function test(b_list){
b_list = [];
}
alert(a_list[0])

86:デフォルトの名無しさん
22/09/11 20:29:51.41 bqV48/aB0.net
>>84
function test(b_list) {
b_list.length = 0
}

87:デフォルトの名無しさん (ワッチョイ 6910-V+uT [180.12.82.129])
[ここ壊れてます] .net
>>85
できました
ありがとうございます

88:デフォルトの名無しさん
22/09/12 09:29:51.85 ptOOOLgwr.net
b_list = [];
が何故ダメかというとb_listを空にしてるんじゃなくて
b_listに新しい配列を代入してるだけだから
ということは覚えておこう

89:デフォルトの名無しさん
22/09/23 01:20:03.32 93J4lVSi0.net
ブラウザで動かすとき、グローバルスコープでの demo って名前は何かある?
この名前の関数作ってボタンの onclick から呼び出そうとしたら関数未定義のエラーになる。
別の名前にすると呼び出せる。

90:デフォルトの名無しさん (スップ Sd43-Kpwt [49.97.97.207])
[ここ壊れてます] .net
タイポかスコープの勘違いとかじゃないの?
コンソールでdemo関数定義して実行したら普通に動いたけど

91:デフォルトの名無しさん
22/09/23 10:32:57.61 UxdKoKVd0.net
>>88
再現可能なコードを出してみたら?
URLリンク(ja.stackoverflow.com)

92:デフォルトの名無しさん
22/09/23 15:04:58.71 i+SKzCkA0.net
>>90
こんな感じだけど、ちょっと分かってきた。
全体貼ろうとしたらセキュリティチェックかなにかに引っ掛かって書けないから、scriptタグの中身と body の中身だけ。
function demo() { alert('DEMO'); }
<form>
<input type="button" name="demo" value="DEMO" onclick="demo()">
</form>
この onclick にとっての demo は多分 form内の input要素の demo になるんだね。
スコープがこの form になると。

93:デフォルトの名無しさん
22/09/23 15:06:34.97 i+SKzCkA0.net
エラーは未定義関数じゃなく、demo is not a function だった。

94:デフォルトの名無しさん
22/09/23 17:05:20.97 bbK6e07Hd.net
thisとthis.formがスコープに入る仕様だそうな
URLリンク(qiita.com)
有効に使う機会よりも謎の挙動にどハマりするケースの方が多そう

95:デフォルトの名無しさん
22/09/23 18:38:15.96 UxdKoKVd0.net
>>91
window.demoかaddEventListenerを使ってみては?
後者がベター

96:デフォルトの名無しさん
22/09/25 08:59:26.24 oCqDdJBP0.net
回答もらった途端にいなくなる


97:質問者多いな



98:デフォルトの名無しさん
22/09/25 17:53:11.47 hlHjM9NA0.net
こんにちは
ブラウザから、ローカルのファイル(画像など)を「関連付けされたソフトで開く」というのはできますか?
HTMLの<a href=#></a>だと、ブラウザ(Chrome)内で開いてしまいますが、これを別の画像ビューアで開きたいです

99:デフォルトの名無しさん
22/09/25 20:26:11.45 oCqDdJBP0.net
>>96
参考情報
URLリンク(akaki.io)

100:デフォルトの名無しさん (ワッチョイ 2b5f-JEaq [106.73.71.2 [上級国民]])
[ここ壊れてます] .net
ありがとうございます

「カスタムURLスキーム」を調べてやったみましたが、ローカルのファイルを指定ができません(画像ビューアは開くがファイルが開かない)
JavaScriptの質問ではないので恐縮ですが、どうやって指定できますかね?

URLリンク(qiita.com)

例えば上のサイトを参考に、画像ビューアをhogeでレジストリ登録して下のようにすると、画像ビューアだけ起動してファイルは見つからなかったと出ます(hoge:file:///C:...などもダメ)

<a href="hoge:C:/tmp/sample.jpg"></a>

101:デフォルトの名無しさん
22/09/26 22:44:18.29 Xyg4q6vF0.net
>>98
違ってるかもだけど、Windowsだったらパスの区切り文字は/じゃなくて\または¥じゃないのかな
で、\は制御文字として扱われるからエスケープして\\にしないとダメとか

102:デフォルトの名無しさん
22/09/26 23:02:16.56 adbpU9F00.net
>>98
アプリの方もURLスキームでの起動に対応してないとだめなんじゃない?
URLスキームはその URLの書式をアプリ独自に決めてあって、アプリはその書式でアクションや対象を判別して動作するように作られてるんだと思う。
とりあえず与えられた引数が分かるテストアプリを見繕って hoge として登録してみたら何か分かるかもよ。

103:デフォルトの名無しさん
22/10/06 16:54:22.37 bvSP9gLaH.net
Xhrで非同期通信するサーバーサイドのファイル(api.php)の中に登録されてる関数を実行することって出来るかな?
api.phpのfunction hoge()を実行するって感じ

104:デフォルトの名無しさん
22/10/06 17:40:38.15 mWLza3X30.net
>>101
リクエストのハンドラがその関数を呼べばいいだけじゃない?

105:デフォルトの名無しさん
22/10/06 18:17:20.20 tI414gt60.net
>>101
ん?
フレームワークも何も使ってないならそもそも該当のphpファイルを指定するから
その中で実行したい事を書けば良いだけでは?

106:デフォルトの名無しさん
22/10/19 06:40:09.61 +dFS1Lme0.net
if (a==b){} と書くべき所を、
間違って if (a=b){} と書いたら、
a<>b な値を入れても true が返ってくる
何が起きているんでしょう?

107:デフォルトの名無しさん
22/10/19 06:51:04.23 PuLzlRQU0.net
>>104
a=bの評価値はb
bがtruthyならifの次の文が実行される

108:デフォルトの名無しさん
22/10/19 11:19:00.04 4XenNUmUa.net
bが0以外なら{}が実行される。

109:デフォルトの名無しさん
22/10/20 01:45:20.86 sarICcZm0.net
>>105
>>106
それじゃifにする意味がない状態だったんですね
ありがとうございました

110:デフォルトの名無しさん
22/10/20 05:56:13.16 BavO7XJlH.net
uBlockで要素取得した時の名前が###contentsです
これをTampermonkeyのJSで要素getするにはどうしたらいいでしょうか?
getElementById、getElementsByTagName、getElementsByClassName、querySelectorAll等ではだめでした

111:デフォルトの名無しさん
22/10/20 12:03:03.14 qg4xQu9m0.net
>>107
条件の中にあえて代入を入れるケースは無くはない。
if (result = func()) ...
みたいな感じとか。
これは比較してるんじゃなくこういうこと。
result = func();
if (result) ...
比較と組み合わせて
if ((result = func()) == 100) ...
みたいな書き方もある。
メリットは単に短く書けるということもあるし、別の言語も含めれば
while ((line = fgets(fp)) != EOF) ...
みたいな、代入と比較が一緒じゃないと書き方的に面倒になる部分に使う。

112:デフォルトの名無しさん
22/10/20 12:59:50.47 QXtRAkax0.net
>>108
getElementById('contents') or querySelector('#contents')

113:デフォルトの名無しさん
22/10/20 13:20:03.60 C0rWwrYjH.net
>>110
なるほど、#つけたらいけました
ありがとうございました

114:デフォルトの名無しさん
22/10/20 15:12:09.85 MJUQgOR60.net
>>106
0だけがfalsyなわけではないはず
URLリンク(262.ecma-international.org)
>>109
代入と組み合わせることですっきり書ける場合があるよな
whileは割と使ってる

115:デフォルトの名無しさん
22/10/20 21:55:34.73 1vPPjI2Y0.net
whileって原始的かつ結構直感的だから使いやすいよね

116:デフォルトの名無しさん
22/10/23 10:06:21.98 6Nh0kUN40.net
<style id="test">
@media screen and (min-width:751px){
#aaa{
width:700px;
}
}
@media screen and (max-width:750px){
#aaa{
width:100%;
}
}
</style>
<スクリプト>
let sheet = document.getElementById("test").sheet;
let st = sheet.cssRules[0].selectorText;
alert(st);
</スクリプト>
このようなmedia screen付きのcssのselectorTextを取得したいんだけど
このようにやってもundefinedになってしまいます。どうすれば取得できますか?
media screenがなければちゃんとselectorTextは#aaaと取得できるんだけど

117:デフォルトの名無しさん
22/10/23 11:43:18.26 hW6qdPXA0.net
console.dirでsheetの中身を覗いて探せば見つかるかと

118:デフォルトの名無しさん
22/10/23 16:29:44.52 l4Ll+vUb0.net
iPhone6などの古い環境のSafariで、ES6以降の各ES(ES2022等)のどこまでサポートしているか、というのはどのように確認すればよいでしょうか?
iOSは12で、UAではSafari Webkit 604.1 となっています。
ESも毎年更新されてPCや現行スマホなら問題なく表示できますが、サポートの終わった古い端末でも表示させるにはどの機能がNGかを確認したいのですが・・・
iOSバージョンやブラウザバージョンを指定して、それがどこまでサポートしているかが分かるサイトや、実際の端末を使ってどの機能がNGかテストするとか、PC上でデバッグ可能(エラー表示)なエミュレータなどあれば教えていただきたいです。

119:デフォルトの名無しさん
22/10/23 16:34:31.24 sfEqSuvv0.net
MacBookを買いましょう

120:デフォルトの名無しさん
22/10/23 16:44:23.51 YzYXhWAT0.net
Can I use のサイトとか、npm のbrowserslist とか?

121:デフォルトの名無しさん
22/10/23 16:55:32.04 l4Ll+vUb0.net
>>118
ありがとうございます。
Can I useのサイトで各ESxxxを検索して概ねサポートされる範囲が分かりました。
Safari 12だとES2020の一部からサポートされない機能があるので、そこら辺が境界ぽいことが分かりました。

122:デフォルトの名無しさん
22/10/23 17:46:05.51 6Nh0kUN40.net
>>115
cssRules[0].cssRules[0].seletctorTextとすることでできました
ありがとうございます

123:デフォルトの名無しさん
22/10/24 22:47:10.94 VafCOtMO0.net
JavaScriptは大変難しい言語です。Rubyの難易度を2、Cの難易度を5、C++の難易度を8にすると、
JavaScriptの難易度は12ぐらいあると思います。
このコーディングガイドはそんなJavaScriptの深みに嵌まらないようにするためのJavaScriptの書き方を規定したものです。
初級者1のための物ですので、わかってやっている人に好きにやってく


124:ださい。 このコーディングガイドは絶対に従わなければならないものではありません。 私は一切強制はしませんし、初級者が従わなければならないという義務もありません。採用するしないはみなさんの自由です。 禁止編 JavaScriptには安易に使用してはいけない機能があります。 下記の機能は、それぞれの機能を使っても良い、または、使うべきであるという理由を説明できない限り、使用してはいけません。



125:デフォルトの名無しさん
22/10/24 23:16:49.94 Sn3QmQ+W0.net
>>121
中途半端に@raccyの記事をコピペした意図は何?
URLリンク(qiita.com)

126:デフォルトの名無しさん (ワッチョイ 2bdb-72Rk [217.178.96.73])
22/10/25 01:00:55.86 IMqCQD810.net
ラッシーこそだよ。欄版は。

127:デフォルトの名無しさん (ワッチョイ 2bdb-72Rk [217.178.96.73])
22/10/25 01:02:07.20 IMqCQD810.net
マンタリーな、シェシェ。
ぐーむ菜素図。i-ku

128:デフォルトの名無しさん (ワッチョイ 2bdb-72Rk [217.178.96.73])
22/10/25 01:02:49.43 IMqCQD810.net
天ら万重も近し。

129:デフォルトの名無しさん
22/10/25 02:28:40.06 iqiTxlhy0.net
>>123-125
日本語でOK

130:デフォルトの名無しさん
22/10/25 14:16:06.20 S5n6e8jb0.net
ファイルを読み込んでArrayBufferから配列へbyteデータにしたいです。
<input type="file" id="file">
<script>
let fileInput = document.getElementById('file');
fileInput.onchange = () => {
var fileReader = new FileReader();
fileReader.onload = function(e) {
var ary = new Uint8Array(fileReader.result);
}
};
これでaryに数値が代入されているんですが
選んだファイルが約100,000kb程のサイズなんですが
処理後のaryのサイズが約1600,000kbとなってしまいます。
なぜ大きくなってしまうのでしょうか?
同じサイズになるようにするにはどこを訂正するといいですか?

131:デフォルトの名無しさん
22/10/25 15:28:48.49 S5n6e8jb0.net
すいません勘違いだったようです。

132:デフォルトの名無しさん
22/10/25 17:11:46.89 jIOTtTPX0.net
初心者です、関数を配列オブジェクトに入れて
findでオブジェクトを取得して、そのオブジェクトの中の関数を呼び出すといったことがしたいです
初心者むけのネット記事なんかを見て組んだのですが、エラーが出てしましいます。
今のソースはこんな状態なんですが、間違っているところはありますでしょうか?
struct = [
 {hoge:huga, func:functionA},
 {hoge:hage, func:functionB}
]
callfunction(check){
 var gets = struct.find((v) => v.hoge === check);
 gets.run()←ここでAとBを使い分けて呼びたい
};
functionA = {}
functioA.run = function(){
~動かしたい処理A~
}
functionB = {}
functioB.run = function(){
~動かしたい処理B~
}

133:デフォルトの名無しさん
22/10/25 17:13:23.18 jIOTtTPX0.net
すみません少し修正です
struct = [
 {hoge:huga, func:functionA},
 {hoge:hage, func:functionB}
]
callfunction(check){
 var gets = struct.find((v) => v.hoge === check).func;
 gets.run()←ここでAとBを使い分けて呼びたい
};
functionA = {}
functionA.run = function(){
~動かしたい処理A~
}
functionB = {}
functionB.run = function(){
~動かしたい処理B~
}

134:デフォルトの名無しさん
22/10/25 17:47:25.32 dHKYynBEd.net
あまり複雑なことはせずに↓みたいなのではダメだろうか
URLリンク(jsfiddle.net)
これではダメで、どうしても>>130のエラーを解消したいなら出ているエラーの内容ぐらいは書くようにしよう

135:デフォルトの名無しさん
22/10/25 17:58:30.53 IMqCQD810.net
>>121
14位.JavaScript
難易度:★★☆☆☆
今回ご紹介するプログラミング言語の中で最も難易度が低いのがJavaScriptです。
初学者がプログラミングの学習を始めるのに適した言語の一つ。
Webサイトなどで動きのある見た目を実現する為に利用されます。
JavaScriptから派生したフレームワークも数多く、
そちらのフレームワークを学習する場合には難易度が高くなります。
ただ、JavaScriptをそのまま利用して学習を進めるであれば、
他の言語と比べて開発環境の構築が不要であることや関連書籍が数多くでていることから、
難易度は低い言語といえるでしょう。

136:デフォルトの名無しさん
22/10/25 18:17:09.25 jFHnOV8wa.net
>>131
ありがとうございます。
まず進捗させないとけないんでそのやり方でやってみて、後々何がエラーの原因なのかは自決できるように調べてみます。

137:デフォルトの名無しさん
22/10/25 23:20:22.24 RDzJGkEc0.net
JavaScript(JS)は、Ruby の数倍難しい
初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発、2017
例えば上の本は、サイの表紙のサイ本と呼ばれるけど、
これだけ勉強しても、文法しか学べない
改訂2版 Ruby逆引きハンドブック、2018
一方、サイ本と比べて、上の本は、多くの主要モジュールの使い方まで説明している。
大体のコーディングパターンまで学べる。
つまり中級者向けなのは、文法のページが少ないから
JSだと、ES3, ES5, ES6 の20年に及ぶ、膨大な文法の変遷を追っていかなければならない。
ES2015(ES6)から、ようやくクラスも出来て、Rubyっぽくなってきた
ちょっとした比較でも、あいまい比較演算子== は使ってはならない。
厳密比較演算子=== だけを使うとか、初心者がはまる罠が多い
学ぶ順序としては、Ruby → JS を勧める

138:デフォルトの名無しさん
22/10/25 23:31:33.41 RDzJGkEc0.net
>>131
では、callback 関数が呼ばれる前に、どちらの処理が呼ばれるか、既に分かっている状態でしょ。
直接引数に、呼ばれる処理を入れている
callfunction('huga');
callfunction('hage');
一方、>>130
では、callback関数が呼ばれる前には、どちらの処理が呼ばれるか、まだ分からない状態。
callback関数の中で初めて、どちらの処理が呼ばれるかが決まる

139:デフォルトの名無しさん
22/10/26 00:55:25.26 WkGW4dkw0.net
コンソールからは実行出来るのに、
拡張機能からだと無視されるのは何?

140:デフォルトの名無しさん
22/10/26 19:58:11.00 radnZEOF0.net
>>132
14位
やっぱ簡単なんだな。

141:デフォルトの名無しさん
22/10/28 14:20:33.37 dQ+2i/bt0.net
乱数の生成について質問です。
日付をシードとした乱数を生成したいのですがどうも偏ります。
シードの採用の仕方にルールなどがあるのでしょうか?
xorshiftのものを2個試しましたが
2ことも偏っていました。
URLリンク(jsfiddle.net)

142:デフォルトの名無しさん
22/10/28 17:22:23.79 mktFZgumd.net
ちょっとだけ違う初期値に対して乱数がほしいという用途は想定外だろう
欲しいものはMurmurHash3みたいなハッシュ関数ではないか?

143:デフォルトの名無しさん
22/10/28 18:09:17.06 HM5QgWcQd.net
一発目のnext()の値を捨てれば良さそうな気も
URLリンク(jsfiddle.net)

144:デフォルトの名無しさん
22/10/28 18:36:54.83 HM5QgWcQd.net
もう少しいじってみたけどどうやらシードの桁数不足が問題なのかな
new Xorshift32(seed * 1000000)
とかにするだけで最初の値にもだいぶ幅が出る
いやいや偏りってそういうことじゃなくてって話ならごめんだけど

145:デフォルトの名無しさん
22/10/28 19:03:49.78 dQ+2i/bt0.net
>>139
不勉強でよくわかってないですが
やりたいのは後で再現できる単純にランダムな遅延時間がほしいだけです。
>>140
delayMaxを100にしてみましたら3回目ぐらいから取れそうと感じました。
シードが小さすぎるということは
一般的には
シードを与えるなら
乱数関数が受けられるシードの最大数/関数で生成されるシードの最大数をかけて
でシードの範囲を広げたほうがいいということなのでしょうか。
それとも単純に今回はシードが小さすぎて特殊事例であまり気にする必要はないと言う感じでしょうか。
お二人ともありがとうございます。

146:デフォルトの名無しさん
22/10/28 20:24:11.90 HM5QgWcQd.net
next()が与えられた値にビット演算をあれこれやって次の値を出してるから
シードが2桁整数ではほとんどのビットがゼロなために
最初の演算結果が狭い範囲に収まってしまってるんでないかと

147:デフォルトの名無しさん
22/10/28 21:20:56.67 dQ+2i/bt0.net
>>143
ありがとうございます
URLリンク(jsfiddle.net)
42億あるうちの下一桁をいじるだけではだめみたいですね。
一日かわればseedも大きく変わるようにして
念の為、3回目あたりをとってみます。
ありがとうございました。

148:デフォルトの名無しさん
22/10/28 22:43:22.03 HM5QgWcQd.net
URLリンク(jsfiddle.net)
少し間違ってた
桁数が少ないのが問題じゃなくて、ビットの可変幅が狭いのが問題
だから桁数増やしてもシードの増分が1なら結局同じ
日付を上の桁に持っていけば1回目も改善する

149:デフォルトの名無しさん
22/11/02 15:24:18.98 8PfyXsoj0.net
ブラウザ上での音声認識と録音について質問です。
現在、マイクから音声認識を行い、簡単な対話を行うWebアプリを作成しようとしています。
Web Speech APIのSpeechRecognitionを使用して音声認識には成功しましたが、これに加えて録音も同時に行いたいです。
SpeechRecognitionは喋っている内容を取っているので、そこから音声ファイルを作成できないかとやったのですが、目的の資料を見つけることができませんでした。
そのため、SpeechRecognitionと並行してmediaDevices.getUserMediaを使い録音する形で実装しました。
PCでは成功したのですが、スマホ(Android、iOS共に)だとmediaDevices.getUserMediaでストリームを使用とした時点で音声がすべてそちらに取られてしまい、音声認識が出来なくなってしまいました。
今度は録音した音声データをGCPのSpeech-to-Textの音声認識に回すかたちで実装してみましたが、即座に認識結果が得られず、対話のテンポが悪くなるため、微妙な感じになってしまいました。
音声認識と録音を両立する良い方法はないでしょうか?

150:デフォルトの名無しさん
22/11/02 15:30:07.55 yKYFejXH0.net
他人が書いたJavaScriptのコードは読みにくいですよね?

151:デフォルトの名無しさん
22/11/02 15:34:06.32 Wk8IFz/p0.net
>>147
自分が書いたコードすら後から見るとよく分からないなんてことはザラ

152:デフォルトの名無しさん (ワッチョイ 174b-2YcT [110.2.215.28 [上級国民]])
22/11/02 15:53:32.48 3LaOl4E/0.net
function double(number){
const result=number*2;
return result;
};

const a=double(10);
console.log(a);

でコンソールに20と表示されますが、return resultの所のイメージがつかめません

function double(number){
const result=number*2;
};

console.log(result);

もっと簡単にこれでは20と表示されないんでしょうか?

153:デフォルトの名無しさん (ワッチョイ 174b-2YcT [110.2.215.28 [上級国民]])
22/11/02 16:00:00.37 3LaOl4E/0.net
すみません
わかりました
double(number)に戻り値number*2を返してるんですね
だからdouble(10)で20になると

154:デフォルトの名無しさん
22/11/02 18:16:59.98 O63UpHJfr.net
>>148
そいつにかまってはいけない

155:デフォルトの名無しさん
22/11/02 21:50:32.06 3LaOl4E/0.net
JavaScriptのパズルをやってたんですけど、このコードだけで意味がわかりますか?
URLリンク(i.imgur.com)
最初の定義とか色々省かれていませんか?
初心者だからはっきりわからないのですが…

156:デフォルトの名無しさん
22/11/02 22:07:02.98 zmf8vxSNM.net
これぐらいなら簡単
変数名と関数名がちゃんと付けられてるからそこから読んでいけば普通に読める

157:デフォルトの名無しさん
22/11/02 22:12:42.94 3LaOl4E/0.net
>>153
変数のlistとかどこにも定義されて無いんですけど…
console.log(list)とか突然書かれても、初心者にはわかりにくい
どこから出てきたのかと…

158:デフォルトの名無しさん
22/11/02 22:46:00.31 f9FvTICb0.net
>>152
任意の数値リストを突っ込むと最大値出してくれるっていうコードだろこれ

159:デフォルトの名無しさん
22/11/02 23:13:35.51 J736PzjWM.net
問題の方にあるのかも知らんし
ここで聞かれても分かんね

160:デフォルトの名無しさん
22/11/02 23:36:43.64 3LaOl4E/0.net
問題はこんな感じです
URLリンク(i.imgur.com)
(画像の下の方が切れてますが、>>152の画像と同じものが入っているだけです)
あまり親切じゃないから初心者には向いて無いのかな?

161:デフォルトの名無しさん
22/11/02 23:40:18.85 t/iark2f0.net
全部負の数値だと使えない

162:デフォルトの名無しさん
22/11/03 11:43:01.93 39/cO+p70.net
このコードは十分初心者向けに書かれていると思うけどねぇ
ただmax=0にしているから、基本は0より大きな数の配列の中から最大値を調べる処理という事に

163:デフォルトの名無しさん
22/11/03 12:47:18.10 EP9jPLDR0.net
>>159
この学習アプリやってた
Google製のJavaScript教育ツール「Grasshopper」は基礎から学べて初心者に優しい
URLリンク(forest.watch.impress.co.jp)

164:デフォルトの名無しさん
22/11/03 15:53:23.61 78vcP9/m0.net
次のステップなどで対応するならいいけどね
max の初期値を配列の先頭から取れば済むだけだが

165:デフォルトの名無しさん
22/11/03 20:27:36.79 EP9jPLDR0.net
ようやくわかりました
2つめの関数の中で前に定義した1つめの関数を実行してるんですね
関数は定義&実行で1ペアと考えないといけない
次に進みます

166:デフォルトの名無しさん
22/11/04 08:09:59.45 RzANRCFJ0.net
#を付ける プライベートクラスフィールドが分かりにくい。
解説しているサイトも少ない。

167:デフォルトの名無しさん
22/11/07 15:24:45.79 zC6hz6+Y0.net
Adobe Illustratorのスクリプトを書くのにHTMLの知識いりますか?
JavaScriptの入門書を読んでたんですけど、前半のJavaScriptの文法の所まで読み終わりました
後半はHTMLとJavaScriptの組み込み方みたいになってるんだけど、ここ読む必要あるのかな?
もちろん知ってた方がためになるんだろうけど、次のAdobe JavaScriptの本へ行こうか迷っています…

168:デフォルトの名無しさん
22/11/07 15:29:11.27 zC6hz6+Y0.net
DTP(印刷)でillustratorを使ってるのでWebは扱っていません

169:デフォルトの名無しさん
22/11/07 15:34:00.02 FsgEaHF8r.net
AdobeのjavascriptというかESバージョンめちゃくちゃ古くて記述するの苦労したが最近はどうなんだ

170:164
22/11/07 15:35:27.96 zC6hz6+Y0.net
自己レスですが必要無いそうです
ES2015以降も必要無いそうです
constとかletが使えないので全部varになってる

171:デフォルトの名無しさん
22/11/07 16:15:41.06 5T/PrU7d0.net
>>164
CEPでも使わない限りはHTMLの知識は不要。

172:デフォルトの名無しさん
22/11/07 16:33:24.89 zC6hz6+Y0.net
>>168
ありがとうございます。

173:デフォルトの名無しさん
22/11/11 22:39:38.06 6PYY3JKr0.net
pg9 = win1.pnl.add('group')
pg9.orientation = "row"
CAN = pg9.add("button",[0,0,100,30],"cancel")
OK = pg9.add("button",[0,0,100,30],"OK")
CAN.onClick = function(){win1.close()}
OK.onClick = function(){
win1.close()
dofn()
}
win1.show()
}
// テキストを元のサイズに戻すための計算
var txtresize=100/bai*100;
// テキストフレームだけを選択する
activeDocument.selection = null; // 全ての選択を解除する
var txtObj = activeDocument.textFrames;
for (var i=0; i<txtObj.length; i++){ // テキストフレーム数だけ繰り返す
try {
txtObj[i].selected = true; // 選択する
}catch(e){}
}
//選択したテキストを"sel"とする
var sel = app.activeDocument.selection;
//選択したテキストの数で繰り返す
for (i=0; i<sel.length; i++)
{
//選択したテキストの幅と高さを元の大きさに戻す
sel[i].resize(txtresize,txtresize);
}
// オブジェクトの選択を解除する
for (var i=0; i<sel.length; i++){
try{
sel[i].selected = false;
}catch(e){}
}
プログラムの最初の方は省略したのですが、
CAN.onClick = function(){win1.close()}の所で、キャンセルがクリックされた時にそれ以降のプログラムが実行されないようにしたいのですが、どう書き換えればいいでしょうか? return;ではそれ以降が実行されてしまいます

174:デフォルトの名無しさん
22/11/11 22:42:38.98 6PYY3JKr0.net
CAN.onClick = function(){win1.close();exit();}
みたいなことをやりたいのですが、exit()はAdobeScriptにはありません…

175:デフォルトの名無しさん
22/11/12 05:24:15.41 /in1tyv80.net
>>170-171
質問の意味がわからない
CAN.onClick = function(){win1.close()}
で処理は終了している

176:デフォルトの名無しさん
22/11/12 13:17:11.95 xCg5uX6U0.net
コールバック関数について、伺いたいのですが。
コールバック関数は、引数に渡される関数という理解でいますが。
これは関数であって、オブジェクトメソッドを渡すこともできますでしょうか。
例えば、
object.addEventlistener()
などの、メソッドも渡すことができますでしょうか?

177:デフォルトの名無しさん
22/11/13 08:09:24.18 YDVUHmoCr.net
object.addEventlistener なら関数だから渡せるけど
object.addEventlistener() は渡せないな

178:デフォルトの名無しさん
22/11/13 09:42:00.89 wFqjoTWK0.net
>>173
object.addEventlistenerで渡せるが、実行時のthis値が変わるので、期待通りに動作しない
bindを使うか、「コールバック関数を渡す関数」にthis値束縛機能があればそれを使う必要がある

179:デフォルトの名無しさん
22/11/13 15:10:49.67 xoKJX++V0.net
ありがとうございます。
Object.AddEventlistenerでも、コールバック関数になりうるということですね。
ただし、期待していることはできない。
関数(ユーザー定義)をコールバック関数にすることはイメージつくのですが。
オブジェクトメソッドをコールバック関数にするイメージがつきません。
何か、例文があれば教えていただけますでしょうか?

180:176
22/11/13 15:14:57.91 xoKJX++V0.net
あ。addEventlistener以外で構いません。

181:デフォルトの名無しさん
22/11/13 15:38:14.40 wFqjoTWK0.net
>>176-177
this値の変え方まで書いているのに、なぜにイメージ?
コールバック関数を使ったコードを書いて試せばすぐにわかる問題

182:デフォルトの名無しさん
22/11/13 15:46:58.08 wFqjoTWK0.net
Function.prototype.bind
URLリンク(developer.mozilla.org)

183:デフォルトの名無しさん
22/11/13 17:36:35.00 BIywqmt20.net
AdobeScriptなのですが、
URLリンク(i.imgur.com)
上の画像の「四角のパスの四隅をハサミツールで切って、塗りを線にする」まではスクリプトで出来るのですが、「短辺を特定する」ということはスクリプトで出来るのでしょうか?
一般的なJavaScriptの話でもいいのですが、出来るとか無理そうとか…

184:デフォルトの名無しさん
22/11/13 19:38:06.31 0s117XaL0.net
質問です、どなたか教えて下さい、どうか宜しくお願いいたします
インターネットラジオ JCBA FMはな再生ページ
URLリンク(www.jcbasimul.com)
上記サイトを開くとCookie利用承諾の画面が出てきます。この利用承諾画面は
document.getElementsByClassName("cookieBanner__btn")[0].click()
とすることで自動的にOKボタンを押して閉じることができました。引き続き再生ボタンを押したいので
document.getElementsByClassName("MuiSvgIcon-root")[0].click()
としましたが、残念ながら自動的に再生ボタンを押すことができません。自動クリック自体が禁止
されているような雰囲気です。たぶんサイト側でクリック禁止にしているのだろうと思いますが
これを利用承諾画面と同じようにJacaScriptで自動クリックするする方法はないでしょうか?

185:デフォルトの名無しさん
22/11/13 20:25:40.17 cqK0B72A0.net
ユーザー操作が起点じゃない場合は音声再生をブロックする、という制限がブラウザ側でかかってることがある
その場合はブラウザの設定で解除できるかもしれない

186:デフォルトの名無しさん
22/11/13 20:33:38.64 8b+kwr5c0.net
>>181
iframeの中かつshadowDOMの中なので一発で要素を取得できない
document.querySelector(".radioPlayer__iframe").contentDocument.querySelector("#player_ui").shadowRoot.querySelector("button").click();
jcba-playerカスタムエレメントはplay()メソッドが実装されてるようなので
document.querySelector(".radioPlayer__iframe").contentDocument.querySelector("#player_ui").play();
でもいける

187:デフォルトの名無しさん
22/11/13 20:47:17.41 Kw8DgDNz0.net
こうじゃないか
document.getElementById("player_ui").shadowRoot.querySelectorAll("button")[0].click()
または
document.getElementById("player_ui").play();

188:デフォルトの名無しさん
22/11/13 22:43:20.67 0s117XaL0.net
>>183
すばらしい!有り難うございます!そのどちらの方法でも再生ボタンがクリックできました!
何を勉強したらあなたのような達人になれるのでしょうか?本当に有り難うございました!
>>184
お答えくださり有り難うございます。ただ、残念ながらその方法はどちらもNGでした。
"player_ui" を "#player_ui" に変えても駄目なので、すみませんが>>183を使わせてもらいます。

189:デフォルトの名無しさん
22/11/14 15:59:19.18 dW/V591r0.net
if( ){ };の( )の中に「関数txtfn()が一度も実行されていなかったら」という条件を書きたいんですけど、どう書けばいいんでしょうか?
無理でしょうか?

190:186
22/11/14 16:42:32.41 dW/V591r0.net
すみません、これがコードです。
SEL = activeDocument.selection
LAY = activeDocument.activeLayer
for(s=0; s<SEL.length; s++) SELfn(SEL[s])
function SELfn(sx){
if(sx.typename != 'PathItem') return
if(sx.filled == false) return
c1 = sx.fillColor
if(c1 != "[GrayColor]"){
    val = c1
        txtfn();
}
}
function txtfn(){
alert(val+"です");
}
alert("グレースケールです");

本当は、関数txtfn()が一度も実行されなかった場合に最後に「グレースケールです」と表示したいのですが、
このコードのままだと毎回最後に「グレースケールです」と表示されてしまいます。
「グレースケールです」は1度だけの表示したいのです(表示する回数が多すぎることになるので)

191:デフォルトの名無しさん
22/11/14 17:23:26.59 Ofrc3j5I0.net
単にループ前にフラグをfalseにでもしておいて、一度でも実行すればtrueにすれば判断出来るのでは?

192:デフォルトの名無しさん
22/11/14 17:46:10.99 dW/V591r0.net
>>188
SEL = activeDocument.selection
LAY = activeDocument.activeLayer
var yk=0;
for(s=0; s<SEL.length; s++) SELfn(SEL[s])
function SELfn(sx){
if(sx.typename != 'PathItem') return
if(sx.filled == false) return
c1 = sx.fillColor
if(c1 != "[GrayColor]"){
val = c1
txtfn();
}
}
function txtfn(){
alert(val+"です");
yk=1;
}
if(yk!=1){
alert("グレースケールです");
}
これで出来ました。
ありがとうございます。

193:デフォルトの名無しさん (ワッチョイ 2abd-masj [133.209.119.15])
22/11/14 18:12:47.71 zxQDBIse0.net
すまん、敢えてここで聞かせて
Windows しか持っておらず、JavaScript の Safari での動作確認のため極力安い MacBook かなにかを買いたい。
中古でもなんでもいいんだけど、今時の Safari が動くやつって何を選べばいい?
Mac も iOS も Safari の系譜もよく分からず途方に暮れてる。
いわゆるブラウザのデベロッパーツールで動作確認したいので、多分 iPhone とかじゃだめなんだよね?
アドバイスおねがい

194:デフォルトの名無しさん (スッップ Sd7a-4CYG [49.98.130.245])
22/11/14 18:37:09.30 srKPlYrDd.net
safariのバージョンってiOSと連動だって話だったと思うから最新のiOSサポートしてる機種ならええんでないの?
Mac系のスレで理由話して最新のiOSが動く安いやつどれ?って聞くのが確実だろう

195:デフォルトの名無しさん
22/11/14 20:44:37.96 pZNm0HpP0.net
動作確認のために実機買うなんて景気のいい話だなぁ羨ましい
俺ならBrowserStackとかLambdaTest使っちゃうけどね

196:デフォルトの名無しさん (ワッチョイ dd5f-PnSp [14.8.104.32])
22/11/14 21:12:34.76 SgEq73X20.net
iPhone持ってる人に実機テストしてもらっちゃうな

197:190 (ワッチョイ f1bd-masj [122.133.73.185])
22/11/14 22:33:47.26 llxM2eVb0.net
>>192
景気なんてよくねーよだからケチりたいんだろ。
でも何そのおもしろそうなキーワードは。調べてくる

>>193
これまで作ったのをたまたま iPhone で見たら動いてないのがあってね。
元々 Safari とか眼中には無かったけどそんなに特殊なことやってるとも思ってなかったんで、動かないとか思ってなかった。
あんまり気分悪いんでちょっと調べておこうかと。

>>191
やっぱ最新OS じゃないとダメかということでそこを軸に探すと、フリマで 2万台くらいらしいってことは分かった。
あと iPad の Safari でもデベロッパーツールを動かせるらしいことが分かったので、そっちの線もありそう。
つか MacOS と iOS って違うのね…

なにはともあれ、取っ掛かりは掴んだ気がする。
ありがとう

198:デフォルトの名無しさん
22/11/14 23:54:57.52 h4ns2H1B0.net
イベントオブジェクトを使わず、thisを使って、
そのイベントの発生元の要素を取得することは可能でしょうか?

199:デフォルトの名無しさん
22/11/15 06:06:01.39 zBqzsCj00.net
>>195
無理

200:デフォルトの名無しさん (ワッチョイ a905-wHkz [210.143.72.233])
22/11/15 08:04:13.30 mRl02hRT0.net
すみません、先日JavaScriptによるクリックについて質問した者です
情けないのですが、今度は別サイトの再生ボタンがどうしても押せず困っています

インターネットラジオFM++ FMはなび再生ページ
URLリンク(fmplapla.com)

ソース見るとiframeもshadowDOMも使っていないように見えるのに、再生ボタンを押せません

document.getElementsByClassName("player_start_button")[0].click()
document.getElementsByClassName("start_stop_button_button")[0].click()

上記2つとも駄目でした。どうすればJavaScriptで再生ボタンをクリックできるでしょうか?
どなたかもう一度だけ教えてください、宜しくお願いいたします

201:デフォルトの名無しさん
22/11/15 09:45:28.64 ott+UO1u0.net
該当する要素がない
start_btns = document.getElementsByClassName("player_start_button")
console.log( start_btns.length ) //=> 0
start_stop_btns = document.getElementsByClassName("start_stop_button_button")
console.log( start_stop_btns.length ) //=> 0

202:デフォルトの名無しさん
22/11/15 11:01:59.02 9SlnRoJw0.net
>>197
ブラウザの DevTools でイベントリスナーの click を見ると見つかる

203:デフォルトの名無しさん
22/11/15 11:16:18.44 9SlnRoJw0.net
>>199
chromeだと当該要素の「検証」をすると出てくる

204:デフォルトの名無しさん
22/11/15 19:29:43.82 T0qQfj8P0.net
>>197
対象のclassをよく見てみよう

205:デフォルトの名無しさん
22/11/15 20:10:55.73 mRl02hRT0.net
>>201
document.querySelectorAll("button")[0].click()で行けました
有り難うございました

206:デフォルトの名無しさん
22/11/16 00:23:35.29 q+7X+iJ00.net
こういう程の良い距離感のアドバイスを遅れる人間になりたいですな

207:デフォルトの名無しさん
22/11/16 01:03:52.10 yZvimkXe0.net
>>170ですが、やっぱりキャンセルボタンを押すと
CAN.onClick = function(){win1.close()}の所で終わらなくて、最後の行まで実行されるんですがどうすれば中断出来るんでしょうか?
キャンセルしてもテキストの大きさが変わって終わります

208:デフォルトの名無しさん (テテンテンテン MM8e-PjKb [133.106.50.10])
22/11/16 01:15:16.40 6ujCOi6jM.net
そもそもキャンセルボタン押す前にテキストサイズ変わってんじゃねえの

209:デフォルトの名無しさん (ワッチョイ 3d4b-aW8A [110.2.215.28 [上級国民]])
22/11/16 01:28:38.23 yZvimkXe0.net
>>205
「画像とテキストが一緒になってる図で、画像だけ拡大縮小してテキストサイズはそのままにする」というスクリプトなんですけど、キャンセルすると図の大きさはそのままでテキストだけ拡大縮小してしまうんですよ
これでは困るのでキャンセルの箇所でコードから抜け出したい

210:デフォルトの名無しさん (ワッチョイ bd4f-FFna [180.0.191.133])
22/11/16 03:25:10.60 pSETlPcG0.net
CAN.onClick = function(){win1.close(); return; }
ではなく、

CAN.onClick = function(){win1.close()}
return;

上は、その無名関数から抜け出すだけで、
下は、全体の処理から抜け出す

211:デフォルトの名無しさん
22/11/16 14:57:45.45 yZvimkXe0.net
>>207
まだ仕事中で確かめられていないのですが、キャンセルでなくてOKの時も抜けたりしませんか?

212:デフォルトの名無しさん



213:ge
>>207 return;を入れると、違う動作を始めたので保留にします。 時間がある時に考えます。 どうもありがとうございました。



214:デフォルトの名無しさん
22/11/17 16:50:10.12 BipbxCG90.net
<div id="zahyou" style="position:absolute">aaaaaaaaaa</div>
<スクリプト>
for(let n=1;n<=100;n++){
if(n % 2 === 0){
document.getElementById("zahyou").style.left = "0px";
}
else{
document.getElementById("zahyou").style.left = "200px";
}
}
</スクリプト>
としてもaaaaaaaaaaの位置が全く動かないけど
<スクリプト>
let n=0;
setInterval(
function(){
if(n % 2===0){
document.getElementById("zahyou").style.left = "0px";
}
else{
document.getElementById("zahyou").style.left = "200px";
}
n++;
}
,100
);
</スクリプト>
とするとaaaaaaaaaaの位置が動くのはどうしてですか?

215:デフォルトの名無しさん
22/11/17 17:45:40.38 ZrcXbqFYM.net
上も動いてるよ
一瞬で終わるから見えないだけ

216:デフォルトの名無しさん
22/11/17 18:17:32.44 6VGHAaqQ0.net
>>210
画面のレンダリングは逐一行われないから。
イベント契機で実行されたスクリプトの処理を一旦終えたときその最終的な結果がレンダリングされるというか、一旦処理を終えないとレンダリングされないと思っておけばいい。
setInterval のやつは、インターバルの契機で実行された処理は1コマ分の処理だけして終わるから、その都度レンダリングされる(かもしれない)。
実際は周期があまり高頻度だと、処理を終えてもレンダリングされるとは限らず間引かれたりする。
ただ未レンダリングだからといってもDOMの状態やスタイルの設定などは逐一適用されてる。

217:デフォルトの名無しさん
22/11/17 20:15:58.57 BipbxCG90.net
>>212
そうだったんですか
ありがとうございます

218:デフォルトの名無しさん
22/11/18 09:19:55.63 Wj1K/ZC10.net
a = "0px";
a = "200px";
a = "0px";
a = "200px";
a = "0px";
a = "200px";
こういう処理を100回やってから、100回目の後だけ再描画されるのだろう。
1~99回までは値が設定されるだけで、再描画されない

219:デフォルトの名無しさん
22/11/18 17:10:38.42 T5zu6F7Id.net
横からで申し訳ないけど、アニメーション処理を行うならsettimeoutとかでわざと描画間隔を空ける必要があるって解釈でいいのかな?

220:デフォルトの名無しさん
22/11/18 17:16:10.46 Zs9eTx2N0.net
>>215
一コマ毎にイベント処理を終えブラウザに処理を返す構造にしないといけない
あるいはスタイルや SVG でアニメーションさせるか

221:デフォルトの名無しさん
22/11/18 17:23:26.00 UFs4jVzI0.net
ブラウザでは、Performanceパネルや
タイムラインパネルでチェックできる

222:デフォルトの名無しさん
22/11/18 19:14:38.47 RNEbLEjB0.net
アニメーションならsetTimeoutよりrequestAnimationFrameだね

223:デフォルトの名無しさん
22/11/18 21:22:51.98 dA0W7FfK0.net
>>216
>>218
わっちょい違うけど同一人物です
勉強になります

224:デフォルトの名無しさん
22/11/19 04:30:35.89 uCGRkc1L0.net
ゲームセンターにある機械とか、パソコンゲームでは、よくコマ(フレーム)落ちが起きる
1/30秒とか1/60秒の間に、処理が終わらないので、再描画できない

225:デフォルトの名無しさん
22/11/19 19:26:10.00 2irpXLl70.net
例えばドキュメント上に5つのアイテムがあるとして、その5つのアイテムそれぞれの幅を合計したものが知りたいのですが、途中までコードを考えました
(5つというのは仮のアイテム数で実際は未定です)
DOC=activeDocument;
SEL=DOC.selection;
for(i=0;i<SEL.length;s++){
BND=SEL[i].geometricbounds;
W=BND[2]-BND[0];
Wが最初の1つのアイテムの幅になると思うのですが、これをSEL[0]~SEL[4]まで合計するにはこの続きにどういうコードを書けばいいのでしょうか?
(間違っていたら既に書いてあるコードを変更してください)

226:デフォルトの名無しさん
22/11/19 19:32:18.92 2irpXLl70.net
すみません
質問してから気付きました
これでいけますか?
DOC=activeDocument;
SEL=DOC.selection;
for(i=0;i<SEL.length;s++){
BND=SEL[i].geometricbounds;
W1=BND[2]-BND[0];
W=W+W1;
}

227:デフォルトの名無しさん
22/11/19 23:28:09.02 9yqGhBqR0.net
>>222
試してから質問しよう

228:デフォルトの名無しさん
22/11/20 07:58:25.96 zjUQ0JII0.net
for の前にW=0してね

229:デフォルトの名無しさん
22/11/20 19:31:32.32 bgVSrlSG0.net
>>224
ありがとうございます
for(i=0;i<SEL.length;i++){ ~ }っていう式がコードの中にいくつも出てくるんですけど、変数iのところはそれぞれの式で変えないといけないんでしょうか?
for(j=0;j<SEL.length;j++){ ~ }とか。
関数内だけですか?
同じ変数文字が使えるのは

230:デフォルトの名無しさん
22/11/20 20:42:57.11 XzYfw6V5H.net
いい質問ですね
変数のスコープの問題なので試してみたらいかがでしょう?
jsのスコープをしっかり押さえると
伸びしろが変わります!

231:デフォルトの名無しさん
22/11/21 02:03:46.52 ZMd64Nu10.net
ありがとうございます
勉強を始めて1か月ですけど改造はわりとうまく出来るようになりました
最初は何が書いてあるのかわからないんだけど、ジーッとしつこく見てるとわかって来ますね

232:デフォルトの名無しさん
22/11/21 07:16:36.42 uz2/XLFXH.net
let も var も(スコープ内)再代入可能です
let i=0;
for(i=0;i<10;i++,console.log(1,i));
for(i=0;i<10;i++,console.log(2,i));
console.log('------');
for(i=0;i<10;i++){
console.log(3,i);
for(i=0;i<10;i++){
console.log(4,i);
}
}
console.log('------');
let t=0;
for(i=0;i<10;i++){
console.log(5,i);
for(t=0;t<10;t++){
console.log(6,t);
}
}

233:デフォルトの名無しさん
22/11/21 08:11:57.92 ygpzkhrQ0.net
>>228
中腹の二重ループについて敢えてやってるなら説明が必要じゃね。

234:デフォルトの名無しさん
22/11/21 18:52:09.71 uz2/XLFXH.net
>>229
for(i=0;i<SEL.length;i++){}
for(j=0;j<SEL.length;j++){}
と質問されてるので入子構造なんだろうなと

235:デフォルトの名無しさん
22/11/21 18:58:18.92 ZMd64Nu10.net
入子じゃないですよ
ドキュメント上にアイテムが複数あって、何回も全アイテムを移動したり変形したりする必用があるので並列です

236:デフォルトの名無しさん
22/11/21 19:04:10.48 ZMd64Nu10.net
>>228
何回も使えるんですね
ありがとうございます

237:デフォルトの名無しさん
22/11/21 19:35:19.44 +zVCoGZg0.net
>>230
二重ループの外と内とで同じ i を使ってることについてよ。
敢えてやってるならどういうメカニズムでどういう結果になるのか説明てあげないと分からないんじゃない?

238:デフォルトの名無しさん (ワッチョイ 9309-2FOX [150.91.1.219])
22/11/21 20:09:25.61 T5+vrdKC0.net
カスタム要素って使われてます?

239:デフォルトの名無しさん (JP 0Hbb-stRS [126.249.157.89])
22/11/21 20:10:57.61 uz2/XLFXH.net
>>232

// No 1
for(i=0;i<10;i++){
console.log(3,i);
for(i=0;i<10;i++){
console.log(4,i);
}
}
console.log('------');


// No 2
let t=0;
for(i=0;i<10;i++){
console.log(5,i);
for(t=0;t<10;t++){
console.log(6,t);
}
}

No1とNo2の違いは分かりますでしょうか?
一度コードを実行してみてください

No1のfor文の繰り返し1回目は、i=0です
次にNo2のfor文では、i=1から始まります
その後No2のfor文が繰り返しされi=10までカウントされNo1のfor文繰り返しに戻ります
その時、i=10になっているので、No1のfor文は終了になり、for文を抜けます

入子構造のインクリメント演算子では同じ変数を使うときには要注意ですね

240:デフォルトの名無しさん
22/11/22 17:55:58.75 VelmWtaS0.net
>>235
ありがとうございます
なかなか難しいですね
勉強を続けます

241:デフォルトの名無しさん
22/11/22 17:58:38.56 VelmWtaS0.net
今日はこういう発見がありました
当たり前と言えば当たり前なんですが
URLリンク(i.imgur.com)

242:デフォルトの名無しさん
22/11/22 18:07:50.06 iGHsIGH/0.net
let、constどころかvarすら使えない(使わない)のであればPythonにでも行ったほうがいいんじゃない?

243:デフォルトの名無しさん
22/11/22 18:52:57.26 VelmWtaS0.net
>>238
adobeスクリプトですがvarは使えます
他人のスクリプトを改造してる段階で、potisionで正しく並べられていなかったのでgeometricBounds[3]にしたと。
adobeのソフトはJavaScriptでないと動きません

244:デフォルトの名無しさん
22/11/22 19:10:38.94 VelmWtaS0.net
セミコロンも入って無いし、あまりお手本としては良くないかも
でもこの人のadobe スクリプトが一番わかりやすいので

245:デフォルトの名無しさん
22/11/22 19:40:30.69 /QBTlFnBH.net
何を制御してるのか知りませんけれど
お好きなように言語を選んで
お好きなようにコードを書けばいいと思います
楽しく好きなように自由に!ですね
JSを使う場合の注意点ですけど
古いJSとの互換性を保つため
JSは結構複雑怪奇な言語になりつつあります
変数の取り扱いはどこ言語でも慎重に設計しますけど
JSの変数とスコープはちょっと特殊なので
制御系でJS扱うのなら注意したほうがって思います

246:デフォルトの名無しさん
22/11/23 01:04:55.03 Gf+fcBNM0.net
推奨しない書き方はほぼESLintで弾けるだろ

247:デフォルトの名無しさん
22/11/23 14:55:32.43 uQH5TeI20.net
ドキュメント内の全てのテキストフレームを選択するのは、
var txtObj = activeDocument.textFrames;
for (var i=0; i<txtObj.length; i++){
txtObj[i].selected = true;
}
で、ここからそれらを変形させたりしていくんですけど、
ドキュメント内全てでは無くて、最初に選択したものの中から
さらにテキストフレームのみを選択するにはどう書けばいいのでしょうか?
var sel=activeDocument.selection;
  var txtObj = sel.textFrames;
for (var i=0; i<txtObj.length; i++){
txtObj[i].selected = true;
これでは、var txtObj = sel.textFrames;でエラーが出ます。

ドキュメント内の選択したものの中のテキストフレームのみを選択しないと、
ドキュメント内の全てのテキストフレームが変形されてしまいます。

248:243
22/11/23 15:35:10.48 uQH5TeI20.net
var sel=activeDocument.selection;
for (var i=0; i<sel.length; i++){
if(sel[i].typename != "TextFrame"){
sel[i].selected = false;
}
}
これで出来ました。
お騒がせしました。

249:デフォルトの名無しさん
22/11/23 15:52:37.80 QLRwruG1d.net
JavaScriptの一般的な文法とかの話はともかく、adobe固有の問題はここで聞くべきではないよ

250:デフォルトの名無しさん
22/11/24 09:02:34.19 8kN4Xh6N0.net
>>244
>>245の言うとおり、もはやここで聞く内容ではない。
adobe forumで聞いた方がいいけど、
レベル的にまだネットで調べれば簡単に答えが見つかる内容だから
なるべく自分で調べたらいいと思う。

251:デフォルトの名無しさん
22/11/24 13:05:30.40 DUoZRcjr0.net
一般的なJavaScriptってgeometricBoundsとか使いませんか?
長方形の座標を得るメソッド

252:デフォルトの名無しさん
22/11/24 13:16:11.58 8kN4Xh6N0.net
>>247
同じアドビでもindesignとillustratorではgeometricBoundsのx,y値の順番が異ってたり、
もはやアプリごとの話題になってくる。

253:デフォルトの名無しさん
22/11/24 13:35:39.39 5aiuStXqd.net
>>247
使えません
それはadobe固有のものです

254:デフォルトの名無しさん
22/11/24 15:52:34.09 DUoZRcjr0.net
>>248
>>249
そうなんですか
水平垂直はわりと簡単に出来るけど、斜めになると数学の三角関数勉強しないといけないって…
道は険しそう…

255:デフォルトの名無しさん
22/11/25 03:26:14.01 4TMxj3Y80.net
$.Deferred()って分かりにくい。

256:デフォルトの名無しさん
22/11/25 17:44:10.29 d3/PWV150.net
配列内の数字が1つでも違ってたらtrueというのをif文で書きたいのですが、どう書けば良いのでしょうか?
例えば[6.356, 6.356, 7.482, 6.356]はtrueで、[6.356, 6.356, 6.356, 6.356]はfalseです。
配列内の数字の個数は決まっていません。
if(~){return;}の~の部分が知りたいのですが…
(違う数値が混じっていたら終了(return)したい)

257:デフォルトの名無しさん
22/11/25 18:01:34.82 NOaCOzi6d.net
配列内の数値が全部同じならtrue,というのを書いてみてください
ところで浮動小数点数には誤差がつきものなので
「だいたい同じ」を意味する処理を書く必要があります

258:デフォルトの名無しさん
22/11/25 18:03:10.25 gnjN6QfX0.net
>>252
配列の変数名がlだとして、
len(set(l))が1より大きかったら違う値が入ってる

259:デフォルトの名無しさん
22/11/25 18:10:27.64 v7fq4Pg10.net
そんな丁度いいオブジェクトがあったんだな

260:デフォルトの名無しさん
22/11/25 19:20:10.26 NT6Ragjt0.net
>>252
var a = [6.356, 6.356, 7.482, 6.356];
if (new Set(a).size != 1) return;
全部同じならSetのsizeは1になるはずだから

261:デフォルトの名無しさん
22/11/25 19:30:19.48 d3/PWV150.net
>>254
エラーが出ますが、間違っていますか?
var I=[72.356, 72.356, 72.356, 72.356, 72.356];
If(len(set(I))>1){
alert("違う値が入っています");
}
alert("全部同じ値です");

262:デフォルトの名無しさん
22/11/25 19:45:09.62 d3/PWV150.net
setってES2015(ES6)で導入されたって書いてありますね。
自分の環境では使えないんだと思います。
let()もたぶん…

263:デフォルトの名無しさん
22/11/25 20:02:47.41 1Hc/VSWcp.net
len も set もそんなメソッドは定義されてない
>>256 は最近のブラウザなら動くはず

264:デフォルトの名無しさん
22/11/25 20:09:20.31 d3/PWV150.net
このコードではダメですか?
var I=[72.356, 72.356, 75.356, 72.356, 72.356];
for(var s=0;s<I.length-1;s++){
if(I[s]!=I[s+1]) return;
例外が出るでしょうか?

265:デフォルトの名無しさん
22/11/25 20:09:23.18 XjJhlDNk0.net
lenとかsetってpythonじゃ?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch