我正在使用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/