プロが教える店舗&オフィスのセキュリティ対策術

多次元配列の任意の要素の中から最大値を1行で取る書き方を教えてください。
例えば、次の多次元配列rの離れた場所に格納された4つのオブジェクトプロパティ(値は1, 2, 3, 4)の最大値を取る方法を教えてください。
<script>
var r = [
{h: 'a', b: [{d: 0, o: 1}, {d: 1, o: 2}]},
{h: 'b', b: [{d: 0, o: 3}, {d: 1, o: 4}]}
]
var m = Math.max.apply(
null,
r.map(
function(o) {
return o.b.map(
function(o) {return o.o}
)
}
)
)
</script>
こんな感じでmapメソッドを入れ子にして出来たら素敵だと思いましたがダメでした。

A 回答 (2件)

No1です



ごめん。勘違いしてしまっていた。
rも配列なので、callする必要がなかったですね。
訂正しておきます。

let d = Math.max(...r.map( e=> Math.max(...e.b.map( b=>b.o ))));
console.log(d); //9
    • good
    • 1
この回答へのお礼

シンプルでいいですね!
大満足です^^

お礼日時:2021/02/21 14:01

こんにちは



対象のオブジェクトの構造が、ご提示のもの限定で良ければ・・・

var r = [
{h: 'a', b: [{d: 0, o: 1}, {d: 1, o: 2}]},
{h: 'b', b: [{d: 0, o: 3}, {d: 1, o: 4}]},
{h: 'c', b: [{d: 0, o: 5}, {d: 1, o: 6},{d: 0, o: 7}]},
{h: 'd', b: [{d: 0, o: 8}, {d: 1, o: 9},{d: 0, o: 0}]}
]

let d = Math.max(...Array.prototype.map.call(r, e=> Math.max(...e.b.map( b=>b.o ))));

console.log(d); // 9

とかでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!