2017-06-27 22 views
-2

解決策を見つけたと思った後にテーブルの値を追加する必要があります 先生はそれが気に入らなかったので、よりエレガントなやり方をしていますか?Javascript - テーブル内の条件付き合計

私のコード:https://pastebin.com/0ZQBgU7b

私の解決策:

const $ = document.querySelectorAll.bind(document); 
$('.total')[0].textContent = 
[...$('.ages')] 
.map(td => parseInt(td.textContent)) 
.filter(ages => ages >= 18) 
.reduce((total, ages) => total + ages, 0); 

P.S. 私の先生はそれが気に入らなかった。

+1

あなたが何を求めているかは完全にはっきりしていません。唯一明らかなことは、先生が間違いなく好きではなかったことです。 – Santi

+4

先生に説明することができますが、彼はそれを理解するのを手助けすることはできません。あなたの解決策は問題ありません。何が好きではなかったのですか? – mkaatman

+2

それが好きではなかった、またはそれを理解していませんでしたか? – Jamiec

答えて

3

3つのループを使用していますが、1つで十分です。マップやフィルタは、ここで必要とされていません。

const $ = document.querySelectorAll.bind(document); 
$('.total')[0].textContent = 
[...$('.ages')].reduce((total, ages) => 
    total + (parseInt(ages, 10) >= 18 ? parseInt(ages, 10) : 0), 0); 

Array.from()を使用する代わりに、スプレッドoperaterも、この場合には良い考えかもしれません。

Array.from($('.ages')).reduce(...) 
+0

この構文を説明するリンクを共有することができれば価値があります。 '... $('。年齢 ') ' –

+0

これはOPコードです。彼はすでにそれを知っていると思います。とにかく、普及した演算子です。 @RajshekarReddy – baao

+0

@RajshekarReddy私はそれが呼ばれたことを思い出すことができませんでした。私は "javascript three dots"をgoogledしました - [spread operator](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator) – Jamiec