[過去ログ] JavaScript の質問用スレッド vol.125 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
32
(1): (スップ Sd03-PAk+ [1.66.101.132]) 2022/08/21(日)10:31 ID:3ESrn3ezd(1) AAS
>>31
先に存在しているとか先に実装されている(?)というようなイメージです
33
(1): (ワッチョイ a37c-QAb4 [221.241.223.58]) 2022/08/21(日)10:42 ID:KqCcLvyW0(1) AAS
>>30
定義が無限循環してると言いたいんだろうけど広辞苑にだってそういうのはあるし、関数ノットイコールメソッドと考えれば矛盾はしてない
たぶんオブジェクトが先だろうけどね
34
(1): (スップ Sd43-PAk+ [49.97.98.169]) 2022/08/21(日)11:25 ID:df/SIE01d(1) AAS
>>33
ありがとうございます

もう少し調べてみると、 外部リンク[html]:tc39.es でTerms and Definitionsのところに、関数はオブジェクトであってプロパティの他に実行可能なコードと状態を持つもの、という感じのことが書かれてて、メソッドはオブジェクトのプロパティの値である関数のことと書かれていました
こちらの説明で一旦納得できました
35: (アウアウウー Sad9-dbST [106.181.223.3]) 2022/08/21(日)11:46 ID:j3ukytx2a(1) AAS
v8のソースでも読んでみれば
36: (ブーイモ MM8b-mKyu [133.159.148.135]) 2022/08/21(日)12:32 ID:IBDK1msSM(1) AAS
オブジェクトが先
オブジェクトはプロパティのコレクション

プロパティとはkey/valueのペアのこと
keyはStringでvalueはプリミティブかオブジェクト
37: (ブーイモ MM8b-mKyu [133.159.149.74]) 2022/08/21(日)12:39 ID:ZOLz03eMM(1) AAS
オブジェクトを定義するのにオブジェクトを使ったりStringという別のオブジェクト使えるの?
と疑問に思うのかもしれないけど
定義が存在する(名前解決可能である)ことを確認するフェーズと
定義の中身を検証するフェーズを分けることで可能

foo関数の中でbar関数を呼び出しつつ
bar関数の中でfoo関数を呼び出すような関数定義ができるのと同じこと
38
(2): (ワッチョイ d501-dbST [60.87.221.16]) 2022/08/21(日)15:06 ID:D11cwWL50(2/2) AAS
>>32
「実装」というが、「仕様」上で両方とも存在しているなら、同時に「実装」されるのでは?

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

参考になるかわからないが、typeof演算子は「[[Call]] を持つObject型」の場合に "function" を返す
外部リンク:262.ecma-international.org
39
(2): (スップ Sdc3-JVFl [1.72.7.185]) 2022/09/02(金)16:08 ID:anBQQFEld(1) AAS
ブックマークレットのスレッドかこちらか悩みましたが質問なのでこちらでご相談させていただきます。

他者のWebサイトを閲覧する際、JavaScriptを用いて作成されている場合、リンクを新しいタブで開けない場面があります。
頻繁にページを進んだり戻ったりする場面、可能であればリンク先を別タブで開くようにしたいです。
ブックマークレットを用いて、現在ページのJavaScriptのリンクを別タブで開くように書き換える処理をすることは可能でしょうか?
40
(1): (ワッチョイ a3b7-83Bc [211.124.165.35]) 2022/09/02(金)16:38 ID:avuNeQJi0(1) AAS
>>39
そのサイト次第かな
クリックした後の画面を一発で開けるURLが用意されてたら基本的に実装できると思う
41
(4): (ワッチョイ a52d-bBdM [220.100.64.9]) 2022/09/03(土)00:11 ID:8AM/s+hA0(1) AAS
連想配列から特定のキーを検索して、重複がないもののみ取り出した配列を取得したいのですが、
このコードだと速度的に問題がありました。何か良い方法があったら教えていただけないでしょうか
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'},
]
省2
42
(1): (ワッチョイ ad5f-wuTS [106.185.148.64]) 2022/09/03(土)02:15 ID:Wm/0iruN0(1) AAS
>>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)
省3
43: (スプッッ Sd03-5GnA [1.75.244.51]) 2022/09/03(土)03:34 ID:E5gjC2rTd(1) AAS
Mapで似たようなこと考えてた
44
(2): (ワッチョイ 3501-bBdM [126.94.243.226]) 2022/09/03(土)10:05 ID:RJZpwhgn0(1/6) AAS
>>41
要素数や重複要素のばらつき具合によって結果は変わるが、最終的には力業が最速な事が多い
外部リンク:jsfiddle.net

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

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

重複検知が頻繁に発生するようであれば、データのも持ち方を new Map や new Set を使うように変更した方がいい
配列はユニークな値を得るのに向いていない
45: (ワッチョイ 3501-bBdM [126.94.243.226]) 2022/09/03(土)10:08 ID:RJZpwhgn0(2/6) AAS
>>44の補足
jsfiddleのconsoleはconsole.time()を実装していないようだ
ベンチマーク結果はブラウザのコンソールで確認する必要がある
46
(1): (ワッチョイ 3501-bBdM [126.94.243.226]) 2022/09/03(土)10:28 ID:RJZpwhgn0(3/6) AAS
すまん
>>44のwhile_loopは期待通りに動かないので忘れてほしい(console.assert()のコードをミスって気づかなかった)
重複要素のばらつき具合によるが、(>>41の配列においては)暫定最速は>>41
47
(1): (ワッチョイ 3501-bBdM [126.94.243.226]) 2022/09/03(土)10:46 ID:RJZpwhgn0(4/6) AAS
>>46
console.assert()の修正、重複チェックをkindのみに修正したら、mapが最速になった
外部リンク:jsfiddle.net
48: (ワッチョイ 3501-bBdM [126.94.243.226]) 2022/09/03(土)11:16 ID:RJZpwhgn0(5/6) AAS
>>47
高速化で考えるべきは「ループ回数の削減」と「変換回数の削減」

>>41 source
>>42 reduce
>>47 map

reduceはループ回数は削減されているが、変換回数がsourceよりも多い
要素数6では「変換コスト > 検索コスト」になってしまい、sourceよりも遅い
要素数192では「変換コスト < 検索コスト」となるので、sourceよりも速い

mapの変換回数は2回で Array.from() と results.values() のみ
ループ回数、変換回数ともにsource,reduceよりも少ない
省3
49
(1): (ワッチョイ 3501-bBdM [126.94.243.226]) 2022/09/03(土)11:42 ID:RJZpwhgn0(6/6) AAS
>>39
a要素でマークアップされているなら、難しくはない

for (let a of document.querySelectorAll('a[href]')) a.target = '_blank';

window.open()などでリンクを開く挙動もJavaScriptで制御しているなら、コードを読んでリンク先を得る手段を考える必要がある
50
(3): (ワッチョイ 9534-9i1j [14.14.181.44]) 2022/09/04(日)09:22 ID:eAq4eNQY0(1) AAS
>>40
>>49
ありがとうございます。

テーブルの表示となっていて、行全体にリンクが設定されているようです。
以下のような記載が複数並んでおり、通常は左クリックでリンク先に移動しかできず、新しいタブで開くことができません。

<tr class=”〇〇〇” data-href=”★リンク先アドレス★” data-target=”〇〇〇”>
<td class=”〇〇〇”></td>
<td class=”〇〇〇”></td>
</tr>

素人ながらいくつかブックマークレットで試したのですが、逆に実行するとリンクが無効になる事が多々でした。
省1
51
(1): (ワッチョイ d510-bEl6 [180.12.82.129]) 2022/09/04(日)12:38 ID:FoFuUBY00(1/2) AAS
<div style="width:100%;height:200px;border:Solid 3px #0000ff" id="test"></div>

これのcss初期設定を取得したいのでstyle="○○"の○○部分を抽出したいんだけどやり方がわかりません。
element.style.widthみたいに取得すると途中で値を書き換えられると初期設定が得られないので
最初にタグに埋め込んであるものを取得したいんです。
1-
あと 951 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.017s