2016-07-20 15 views
0

先日私は質問をしました(here)。誰かが親切に答えてくれました。彼らの答えは、私がorginallyすることを意図したものです。しかし、理解できないコードがあり、誰かが私を助けてくれることを望んでいました。Javascriptの機能の説明 - Knockout.js

self.currentlySelected = ko.computed(function() { 
    return self.topics().reduce(function(count, topic) { 
     return count + (topic.selected() ? 1 : 0); 
    }, 0); 
    }); 

誰でもこの機能が何をしているか説明するのに十分親切でしょうか?ありがとうございました!

+0

私は多くの機能を参照してください...あなたはどちらを理解しようとしていますか? '.reduce'? '.computed'? –

+0

reduce関数です。 .reduce関数が何をするのか理解していると思いますが、文脈でどのように動作するのか分かりません。 –

答えて

1

それはトピックのリストに減らす方法を使用している、それはあなたのトピックの各項目を横断観測可能な配列、それが選択されているかどうかをチェックし、その後のすべてを追加していますそれらのアップ。それはあまりにも次のようになります。

self.currentlySelected = ko.computed(function() { 
    var count = 0 
    for(var i = 0; i < self.topics().length; i++){ 
    var topic = self.topics()[i] 
    if(topic.selected()){ 
     count += 1; 
    } 
    } 
    return count 
}); 

.reduce方法は、ネイティブのJavascriptメソッドとよりHere

.computed方法がknockout.jsで、Here

+0

ああ、そうです。これははるかに簡単で、reduce関数がどのように動作するかを見ています。ありがとうございました。 –

2

それはcurrentlySelectedが計算されたプロパティだと言います - 値を見るためには、関数を評価する必要があります。

機能は言う:

1. Get the topics 
2. Reduce the topics down to a single value, using the following function 
3. If the topic is selected, add 1 to our running total (count). 
    Otherwise, add 0. Our initial value for count is 0. 
1

かなりよく説明されて見つけることができますです内部から開始しましょう

self.topics().reduce(/* code... */, 0) - これはself.topicsに格納された配列のArray.prototype.reduce()を呼び出しています。この関数はコレクションに対して機能し、単一の値に減らします。この場合はcount + (topic.selected() ? 1 : 0)であり、選択されたトピックの数を返します。最後の部分は、カウントコードself.topics().reduce(/* code... */, 0)の後に最後に渡されたゼロで、の最初のの値です。したがって、ゼロから始まり、選択した各トピックを数え、結果を返します。

ko.computed(function() { /* reduction code */ });computed observableです。変更に依存している観測値があれば自動的に変更されるKnockout observableです。この場合、これはself.topicsです。これらの変更(追加/削除など)によってself.currentlySelectedが再計算されるため、現在選択されている項目が常に表示されます。彼らのカウント、より具体的に。

関連する問題