「それ、もっとスマートに書けるよ」がもっとスマートに書けるよ。
ある特定の文字列が別の文字列内にあるかどうか
const ua = navigator.userAgent; if (~ua.indexOf('iPhone') || ~ua.indexOf('iPod') || ~ua.indexOf('iPad')) { return 'ios'; } else { return 'other'; }
String.prototype.includes()を使いましょう。
const ua = navigator.userAgent;
if (ua.includes('iPhone') || ua.includes('iPod') || ua.includes('iPad')) {
return 'ios';
} else {
return 'other';
}
※「それ、もっとスマートに書けるよ」を書いた人はnavigator.userAgent
を配列だと勘違いしていますが、navigator.userAgent
は文字列です。(だからua.indexOf()
はArray.prototype.indexOf()ではなくてString.prototype.indexOf()です。)「ある特定の要素が配列内にあるかどうか」を調べる場合は、Array.prototype.includes()を使いましょう。
それ即時関数使わなくても出来るよ
const { foo, bar } = (() => { if (new Date().getHours() < 12) { return { foo: 'forenoon', bar: 'am' } } else { return { foo: 'afternoon', bar: 'pm' } } })();
三項演算子を使いましょう。
const { foo, bar } =
new Date().getHours() < 12 ?
{ foo: 'forenoon', bar: 'am' } :
{ foo: 'afternoon', bar: 'pm' }
URLクエリーパラメータのパース
const result = params.reduce((acc, param) => { const pair = param.split('='); acc[pair[0]] = decodeURIComponent(pair[1]); return acc; }, {});
URLSearchParamsを使いましょう。
const result = new URLSearchParams(params);