reduceの覚書です。
目次
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
詳しくはこちらの記事が参考になります。
Qiita
![](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9SmF2YVNjcmlwdCVFMyU4MSVBNyVFOSU4NSU4RCVFNSU4OCU5NyVFMyU4MSVBRSVFNiU5QyU4MCVFNSVBNCVBNyVFNSU4MCVBNCVFMyU4MyVCQiVFNiU5QyU4MCVFNSVCMCU4RiVFNSU4MCVBNCVFNiVCMSU4MiVFMyU4MiU4MSVFMyU4MiU4QiVFMyU4MSVBQSVFMyU4MiU4OXJlZHVjZSVFMyU4MSVBNyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9NDZjNzcxZTU0MTAwYzE4OTNhNjFmYmNmNDE3ZmI1MDk&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBoYWNoaXN1a2Fuc3cmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWQ1MmViY2QxMzFiZjgxNTYyOTFiMTM2M2IyMjQyNDBl&blend-x=142&blend-y=486&blend-mode=normal&s=882d5ad65406a3beed800a34013107cb)
JavaScriptで配列の最大値・最小値求めるならreduceで – Qiita
JavaScriptでMath.max.applyやMath.maxに対してスプレッド構文が使えなかった時にreduceを使って最大値を求めた時のメモです。なんでreduceいいかも!と思ったのか、…
Qiita
![](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgwJTkwSmF2YVNjcmlwdCVFMyU4MCU5MSVFOSU4NSU4RCVFNSU4OCU5NyVFMyU4MSVBRSVFNiU5QyU4MCVFNSVBNCVBNyVFNSU4MCVBNCVFRiVCQyU4OCVFNiU5QyU4MCVFNSVCMCU4RiVFNSU4MCVBNCVFRiVCQyU4OSVFMyU4MiU5MiVFNSU4RiU5NiVFNSVCRSU5NyVFMyU4MSU5OSVFMyU4MiU4QiVFMyU4MSVBQiVFMyU4MSVBRiUyMHJlZHVjZSUyMCVFMyU4MiU5MiVFNCVCRCVCRiVFMyU4MSU4NiVFMyU4MSVBRSVFMyU4MSU4QyVFMyU4MSU4NCVFMyU4MSU4NCVFMyU4MiU4OSVFMyU4MSU5NyVFMyU4MSU4NCZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9NDVjMDJlNjhkOGY2YmRlN2NkMjRkZDkxODcwNjk4YTA&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBuZGomdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWU5MzE5MmQ3ZWRkNGU5MjU5NjE1YzlmMGRmZjAxODE4&blend-x=142&blend-y=486&blend-mode=normal&s=8e396f7301b117f3a118d8bfd1955a56)
【JavaScript】配列の最大値(最小値)を取得するには reduce を使うのがいいらしい – Qiita
こちらの記事は Zenn に移行しました。https://zenn.dev/ndjndj/articles/5a2f93374b3fc3
最大値の2番目、3番目を取り出すならソートするのが早そうです。
reduceは万能型であり、他にもいろいろなことができますよ。
コメント