reduceの覚書です。
Contents
reduceはオブジェクトでは使えない?
JavaScriptでは、reduce
メソッドは配列のプロトタイプに属しているため、配列に対して直接使用できますが、オブジェクトに対しては直接使用することはできません。オブジェクトに reduce
のような操作を行う場合は、オブジェクトのキー、値、またはエントリ(キーと値のペア)の配列を生成し、それに対して reduce
を適用する必要があります。
reactの配列の初期化(reduce)
チェックボックスが配列の際に初期化する方法です。
const [ArrayState, setArrayState] = useState>(
array.reduce((acc, curr) => ({ …acc, [curr]: false }), {})
);
reactのオブジェクトの初期化(reduceは使えない)
オブジェクトの場合、reduceは使えません。チェックボックスがオブジェクトの際に初期化する方法です。
const initializeObjsState = () => {
const initialState = {};
for (const obj in objs) {
if (objs.hasOwnProperty(type)) {
initialState[obj] = false;
}
}
return initialState;
};
const [objState, setObjState] = useState<Record<string, boolean>>(
initializeObjsState()
);
スポンサーリンク
Math.max.applyではなく、reduceで最大値を取得
配列操作の場合はMath.max.applyを使うと融通が聞きにくいです。単純に最大値を取得するならいいのですが、最大値の名前を取得する場合など困ります。
const max = Math.max.apply(
null,
obj.map(function(o) {
return o.value
})
)
数字の最大値ではなく、最大値のキーワードが取得できます。
const maxKey = object.reduce((a, b) =>
a.value > b.value ? a : b
).key
詳しくはこちらの記事が参考になります。
JavaScriptで配列の最大値・最小値求めるならreduceで – Qiita
JavaScriptでMath.max.applyやMath.maxに対してスプレッド構文が使えなかった時にreduceを使って最大値を求めた時のメモです。なんでreduceいいかも!と思ったのか、…
【JavaScript】配列の最大値(最小値)を取得するには reduce を使うのがいいらしい – Qiita
こちらの記事は Zenn に移行しました。https://zenn.dev/ndjndj/articles/5a2f93374b3fc3
最大値の2番目、3番目を取り出すならソートするのが早そうです。
reduceは万能型であり、他にもいろいろなことができますよ。
コメント