2012-10-25 6 views
0

Underscore.js를 사용하고 있습니다. 다음 JavaScript 배열이 있다고 가정 해보십시오.컬렉션에서 항목을 만들거나 늘리십시오.

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

그리고 임의의 새 이름을 사용하고 싶습니다. 배열에 이미있는 경우 개수를 1 씩 증가시키고 싶습니다. 그렇지 않으면 1을 추가하고 싶습니다. 밑줄을 사용하여이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

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

_.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/

+0

감사합니다! 나는 그것이 그것이 참고를 되 돌렸다는 것을 깨닫지 못했다. – Richard

관련 문제