2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHPer脳の人がJavaScriptでarray_sumをする

Last updated at Posted at 2020-05-20

前提

例えば、レジみたいなプログラム組むときにこんな感じの連想配列にぶち当たることがあるかと思います。

品名(name) 金額(price)
ナナチ 100
ストロングゼロ 118

で、こいつの総額の計算を出したいって思うことがあると思うんですよ。
これくらいなら暗算とか言わないでプログラムで計算してくださいね。

PHPで書く

PHPだとこんな感じに書けると思います。

$items = [
    ['name' => 'ナナチ', 'price' => 100],
    ['name' => 'ストロングゼロ', 'price' => 118],
];

// PHP7以前の書き方
$sub_total = array_sum(array_map(function($i){
    return $i['price'];
}, $items));

// PHP8以降の書き方
$sub_total = array_sum(array_map(fn($i) => $i['price'], $items));

echo $sub_total; // 218

この array_sum() という関数は「引数にとった配列の合計値を出す」ってやつなのです。
便利ですよね。
https://www.php.net/manual/ja/function.array-sum.php

JavaScriptで書く

んで、JavaScriptなんですけど、 array_sum() 相当のものはないです。
その代わり Array.prototype.reduce() というのを使います。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

ってなわけでこんな感じになります。

const items = [
    {'name': 'ナナチ', 'price': 100},
    {'name': 'ストロングゼロ', 'price': 118},
];

const subTotal = items.reduce((accumulator, currentValue) => {
    return accumulator + currentValue.price;
});

console.log(subTotal); // 218

参考に

PHPにも array_reduce() はあります。
https://www.php.net/manual/ja/function.array-reduce.php

さっきのを array_reduce() で書くとこんな感じですかね?

$items = [
    ['name' => 'ナナチ', 'price' => 100],
    ['name' => 'ストロングゼロ', 'price' => 118],
];

// PHP7以前の書き方
$sub_total = array_reduce($items, function($carry, $item){
    return $carry + $item['price'];
});

// PHP8以降の書き方
$sub_total = array_reduce($items, fn($carry, $item) => $carry + $item['price']);

echo $sub_total; // 218

意外とスッキリ書けるもんですね。array_mapするくらいならこっちでもいいのかも。

もうちょい詳しくはこちら。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?