2016-08-23 2 views
1

그래서 Immutable.js를 사용하고 있으며 일반 Immutable.Map을 사용하고 싶지 않을 때 개체를 정렬하기 때문에 개체를 약간 전환해야했습니다. 그것은 (이전에, 당신이 보았던 배열과 같은 해쉬를 사용하고있었습니다). OrderedMap조차도 작동하지 않으므로 "새로운"객체를 넣었습니다. 물론 지금 obj는 그 순서를 유지합니다. 하지만 이제는 특정 ID를 얻기 위해 매번 반복해야합니다. 쓸데없는 것 같아요.이 경우 키 (id)를 요청할 수있는 헬퍼 함수가 있으면 궁금합니다. 적절한 obj를 얻으십시오. 나는 _id가 1638 인에 OBJ를 원한다면Immutable.js 및 단축키 가져 오기 단축키

"sneakers": Immutable.List([ 
    [{_id: 1, color: "red", price: 250}], 
    [{_id: 1638, color: 728, price: 90}] 

등 ...

그래서, 나는 그것을 통해 필터링해야 할 것이다. 이전에 나는 "getIn"할 수있었습니다. 이 데이터 구조가 주어진 Immutable.js를 사용하면 빠른 방법이 있습니까?

+0

'Map' 내에서 소위 "정렬"에 관심이있는 이유가 있습니까? –

+0

네, 개체 구조 순서를 따르는 기본보기가 있기 때문에. 기본 뷰 배열을위한 2 차 컨테이너를 생성하고 그것을 반복하는 것은 객체 구조를 통해 순서를 보장 할 수있을 때 낭비되는 것으로 생각됩니다. 해시가 주문을 보장 할 수 없음을 이해합니다. 주문을 허용하는 기본 제공 기능이 있기를 바랍니다. –

답변

2

이 완벽한 해결책이 아니다,하지만 당신은 항상 내부 배열 내부에 하나의 객체가 모든 _id 's의 고유 경우, 당신이 사용할 수있는이 솔루션에서

sneakers.find(function(data) { 
    return data.find(function(innerArr) { 
     return innerArr.get("_id") === 1638 
    }) 
    }).get(0).toJS(); 

을, 당신은 반복 할 필요가 없습니다 모든 List, 첫 번째 항목을 찾으면 반환됩니다.

작은 알림 : Immutable.List는 목록을 한 수준에서만 변경할 수 없도록 변환합니다. 내부 배열은 여전히 ​​변경 가능합니다. List 대신 fromJS()를 사용해야합니다. 내 솔루션 fromJS() 사용을 위해 작동합니다.

+0

고마워 .. 그래 - 나는 발견 한 것보다 조금 덜 간섭적인 것으로 생각했지만 파괴로 코드를 조금 줄일 수 있었다. –