2022-01-01

anond:20220101145248

正直動けばいいと思うので、現状でも問題ないと思うけれどちょっとだけ気になった点。

$$使ってる時点で、デベロッパーツール前提なのは分かるけど、 javascriptで動かしたいのか、デベロッパーツールで動かしたいのか、どっちつかずな書き方になっている。

$$('.hatena-star-inner-count').map(a => a.click());
let data = {};
Array.from($$('.entry-comment-contents')).forEach(x => {const userName = x.querySelector('.entry-comment-username a').href.split('/')[3];const comment = x.querySelector('.entry-comment-text').innerText;const stars = Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3]);data[userName] = [comment, stars];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("\n"));

デペロッパツールだけで動くだけでいいなら、3行目のArray.fromがなくても動く。多分、forEachをmapに書き換えても動く。個人的にはforEachに統一したいけど、そこは好みレベル問題だと思う。

$$('.hatena-star-inner-count').map(a => a.click());
let data = {};
$$('.entry-comment-contents').forEach(x => {const userName = x.querySelector('.entry-comment-username a').href.split('/')[3];const comment = x.querySelector('.entry-comment-text').innerText;const stars = Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3]);data[userName] = [comment, stars];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("\n"));

逆に、javascriptで動かしたいなら1行目と3行目はquerySelectorAllに書き換えれる。

document.querySelectorAll('.hatena-star-inner-count').forEach((a)=>{a.click()});
let data = {};
document.querySelectorAll('.entry-comment-contents').forEach(x => {const userName = x.querySelector('.entry-comment-username a').href.split('/')[3];const comment = x.querySelector('.entry-comment-text').innerText;const stars = Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3]);data[userName] = [comment, stars];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("\n"));

これも好みの問題だけど、途中のconst宣言は一回しか使ってないので、宣言せずにそのまんま入れてもいいんじゃないかと思った。

document.querySelectorAll('.hatena-star-inner-count').forEach((a)=>{a.click()});
let data = {};
document.querySelectorAll('.entry-comment-contents').forEach(x => {data[x.querySelector('.entry-comment-username a').href.split('/')[3]] = [x.querySelector('.entry-comment-text').innerText, Array.from(x.querySelectorAll('.list-star-container a.hatena-star-star')).map(y => y.href.split('/')[3])];});
console.info(Object.entries(data).map(x => { return ['|', `b:id:${x[0]}`, '|', x[1][0], '|', x[1][1].join(','), '|'].join(' '); }).join("\n"));
|<<

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん