我正在使用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感觉很麻烦。有没有更紧凑的方法?

最佳答案

_.find()返回对数组中“ bird”对象的引用。通过该引用,您可以直接操作对象:



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()

通过这些调整,我觉得您的代码已经既简洁又可读。


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

08-17 20:25