2016-06-24 1 views
0

저장소 배열에서 주어진 항목을 몇 개의 저장소가 포함하는지에 대한 목록을 만들려고합니다. stores 배열의 개별 객체에는 여러 속성 (이름, 위치 등)이 포함될 수 있지만 인벤토리 (실제 주식 번호가 아닌 항목 유형의 배열)를 선택하려고합니다. ['hammers', 'wrenches', 'screw drivers'), 각 항목이 포함 된 속성으로 개체를 만듭니다.Underscore.js 개체를 반환하는 _.duduce()

//simplified stores array for reference 
stores = [ 
     { name: "Al's Hardware", inventory: ['hammers', 'wrenches'] }, 
     { name: "House Depot", inventory: ['wrenches', 'hammers', 'screw drivers'] }, 
     { name: "Grove Hardware", inventory: ['wrenches', 'screw drivers'] } 
]; 

var itemCount = _(stores).chain() 
    .map(store => store.inventory) 
    .flatten() 
    .reduce((list, item) => list[item] = (list[item] || 0) + 1, {}) 
    .value(); 

console.log(itemCount['hammers']); //Expected: 2; Actual: undefined 
console.log(itemCount); //Expected: object containing all names and values; Actual: 1 

확실하지 아직 내가 잘못,하지만 난 그것이 내가 _.reduce를 사용하기 위해 노력하고있어 방법과 관련이있다 같은데요 무엇을(). 그러나,이 시점에서 나는 잃어 버렸기 때문에 다음에 무엇을 시도해야할지 확신이 없습니다.

나는 이것이 내가 원하는 구조 (내가 work-arounds를 찾고있는 것이 아니다)이다라고 확신한다, 나는 단지 내가 줄이기 위해 분명히하고있는 것이 무엇인지, 그리고 그것을 어떻게 바꿀 수 있는지 궁금하다. 그것은 보이는 뭔가를 날 다시주지 제대로 그래서 같은

{'hammers': 2, 
'wrenches': 3, 
'screw drivers': 2} 

+0

당신이 무엇을'매장을 공유 시겠어요 사용할 수 있습니다 '어떻게 생겼어? – Timo

+0

'stores'를 포함하도록 수정되었습니다. – Brad

답변

1

.reduce의 당신은 당신이 무슨 짓을했는지 화살표 기능을 사용하지 않는 경우 콜백, 빈 객체 즉 initialValue를 반환해야 예 :

.reduce(function (list, item) { 
    return list[item] = (list[item] || 0) + 1 
}, {}) 

.reduce(function (list, item) { 
    list[item] = (list[item] || 0) + 1 
    return list 
}, {}) 

해야합니다 그리고 당신은 한 라이너를 원하는 경우

.reduce((list, item) => (list[item] = (list[item] || 0) + 1, list), {}) 

console.log(['a', 'a', 'b', 'c'].reduce((list, item) => (list[item] = (list[item] || 0) + 1, list), {}))

+0

좋습니다. 불행하게도, 당신이 마지막에 포함시킨 한 줄짜리는 나를 위해 작동하지 않지만'.reduce ((list, item) => {list [item] = (list [item] || 0) +1; 리턴리스트;}, {}); – Brad

관련 문제