0

Underscore.jsを使用しています。次の JavaScript 配列があるとします。

var birds = [
  { name: 'pigeon', count: 2 },
  { name: 'swallow', count: 6 }
];

そして、任意の鳥の名前を付けたいと思います。既に配列にある場合は、カウントを 1 増やしたいと思います。そうでない場合は、カウントを 1 にして追加したいと思います。Underscore でこれを行う最善の方法は何ですか?

現在、私はやっています:

var mybird = 'swan';
var bird_present = _.find(birds, function(b) { return b.name === mybird) });
if (!bird_present) {
   birds.append({ name: mybird, count: 1});
} else { 
  _.each(birds, function(b){
    if (b.name === mybird) { 
       b.count += 1;
    }
  });
}

しかし、.find と .each の両方を使用すると、面倒に感じます。よりコンパクトな方法はありますか?

4

1 に答える 1

4

_.find()配列内の「鳥」オブジェクトへの参照を返します。その参照を通じて、オブジェクトを直接操作できます。

var mybird = 'swallow';

var bird = _.find(birds, function(b) { return b.name === mybird; });

if (!bird) {
    birds.push({ name: mybird, count: 1 });
} else {
    // updating our reference to the bird object in "birds" arr
    bird.count += 1;
}

また、行に構文エラーがありました_.find()。配列に追加する正しい方法は.push().

これらの調整により、あなたのコードはすでに簡潔で読みやすいものになっていると思います。</p>

http://jsfiddle.net/Sf4xc/1/

于 2012-10-25T22:00:06.183 に答える