많은 다른 "목록"항목을 사용하는 NodeJS 코드를 만들고 있습니다. 기본 구현은 Immutable.List, Immutable.Set, Javascript Array 및 Javascript Set를 사용합니다.동일한 코드를 사용하여 immutable.List, immutable.Set 또는 Javascript Array 또는 Set으로 반복 할 수 있습니까?
내가 들어 가지 않는 이유 때문에 기본 컬렉션에 관계없이 이러한 항목을 반복 할 수 있기를 바랍니다.
일부 배경이 유용 할 수 있습니다. Array의 경우 다음을 사용하여 Javascript 배열을 반복 할 수 있습니다. 다음과 같이
Immutable.List를 들어let anArray = [ new SomeObj(), new SomeObj(), ... ]
for(let idx=0; idx < anArray.length; idx++){
let someObj = anArray[idx];
// ... etc
if (someCondition) break;
}
, 내가 (대신 길이 속성)을 Immutable.List.size 속성을 사용하고 "Immutable.List.get"기능을 사용할 필요가 :
const immutable = require('immutable');
let aList = immutable.List([ new SomeObj(), new SomeObj(), ... ]);
for(idx=0; idx < aList.size; idx++){
var item = aList.get(idx);
// ... etc
if (someCondition) break;
}
약간의 차이점을 제외하고는 루핑 로직이 매우 가깝습니다.
이러한 각 개체에서 사용할 수있는 forEach() 메서드를 사용하면 자연스러운 대답을 제시하는 사람들에게 도움이됩니다. 일반적인 자바 스크립트 Array.forEach()은 루프가 깨지는 것을 처리하지 않습니다 (이 경우 Array.some() 메서드가 필요합니다). Immutable.List는 루프에서 "깨는"것을 지원하는 Immutable.Collection.forEach을 기반으로합니다. 그래야 작동 할 수 있지만 Javascript 객체를 변경 불가능한 시퀀스/컬렉션으로 래핑해야합니다. 필자는 Immutable 라이브러리를 처음 사용하기 때문에 Immutable에 익숙한 사람들에게 잘 알려진 또 다른 접근법이있을 수 있습니다.
내가 생각하고있는 접근 방식을 다음에 설명합니다.
for(let idx=0, looper=new Looper(aListOrSet); idx < looper.length(); idx++){
var item = looper.get(idx);
// ... etc
if (someCondition) break;
}
내가 검토 한 어떤 것들은 다음과 같습니다 : 나는 다음과 같은 솔루션을 제공하는 유틸리티 기능을 생각하고
- How to loop through Immutable List like forEach
- Immutable.Collection.forEach
- Immutable Sequences -이 힘을 속임수가 돼. Javascript 객체를 변경 불가능한 시퀀스로 변환해야하지만 작동 할 수 있습니다.
누구든지이 문제를 해결하려고 했습니까? 그렇다면이 문제를 어떻게 해결 했습니까?
내 솔루션을 구현할 때 Javascript Set은 인덱스를 기반으로 세트에서 항목을 가져 오는 방법을 제공하지 않는다는 것을 깨달았습니다. 그래서 constructor (anObj), length() 캐시 (필요한 경우), length를 반환하는 메소드와 주어진 인덱스에서 항목을 반환하는 get (idx) 메소드를 가진 Looper라는 클래스를 만들었습니다. 이 정보를 반영하도록 질문을 업데이트하겠습니다. – PatS