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 回答