このES6コードは、BabelでES5にコンパイルした後、.each
内のthis
のコールバックがundefined
になります。この問題を修正するにはどうすればよいですか?
let mediaBoxes = $(".now-thumbnail");
let titles = [];
mediaBoxes.each(() => {
let obj = {
index: i,
title: $(this).find(".now-thumbnail-bottomtext").text().trim()
};
titles.Push(obj);
});
私の解決策は、this
をまったく使用せず、コールバック関数に渡される変数を使用することです。 1つ目はインデックスで、2つ目はDOM要素自体を提供します。
let mediaBoxes = $(".now-thumbnail");
let titles = [];
mediaBoxes.each((index, element) => {
let obj = {
index: index,
title: $(element).find(".now-thumbnail-bottomtext").text().trim()
};
titles.Push(obj);
});
これは、this
の平均が矢印関数で同じではないためです。
矢印関数は、囲んでいるコンテキストのthis値をキャプチャします。
each() 関数は、コールバックへの2番目の引数として要素を渡します。
しかし、より適切な解決策は、 each() の代わりに 。map() も使用することです
let mediaBoxes = $(".now-thumbnail");
let titles = mediaBoxes.map((i, el) => {
return {
index: i,
title: $(el).find(".now-thumbnail-bottomtext").text().trim()
};
}).get();