반응형
유형 스크립트에서 값으로 지도를 "필터링"할 수 있습니까?
저는 키 대신 값으로 지도를 필터링하는 방법을 찾고 있습니다.Angular 애플리케이션에 다음과 같이 모델링된 데이터 세트가 있습니다.
{
"85d55e6b-f4bf-47bb-a988-78fdb9650ef0": {
is_deleted: false,
public_email: "007@example.org",
id: "85d55e6b-f4bf-47bb-a988-78fdb9650ef0",
modified_at: "2017-09-26T15:35:06.853492Z",
social_url: "https://facebook.com/jamesbond007",
event_id: "213b01de-da9e-4d19-8e9c-c0dae63e019c",
visitor_id: "c3c232ff-1381-4776-a7f2-46c177ecde1c",
},
}
이 항목의 키는 다음과 같습니다.id필드를 선택합니다.
이 항목들 중 몇 개를 고려할 때, 저는 필터링하고 반환하고 싶습니다.new Map()지정된 항목만 포함합니다.event_id만약 이것이 배열이라면 저는 다음과 같이 할 것입니다.
function example(eventId: string): Event[] {
return array.filter((item: Event) => item.event_id === eventId);
}
기본적으로, 저는 다음의 기능을 복제하려고 시도하고 있습니다.Array.prototype.map()배열 대신 맵에서만 사용할 수 있습니다.
Lodash가 제 프로젝트에서 이미 사용 가능하기 때문에 보다 간결한 방법으로 이를 달성하는 데 도움이 된다면 기꺼이 사용하겠습니다.
그렇다.
Array.from(map.values()).filter((item: Event) => item.event_id === eventId);
또는 TypeScript 옵션의 경우,
[...map.values()].filter((item: Event) => item.event_id === eventId);
다음은 키와 값을 함께 보관하는 간단한 구문입니다.
const dict = new Map([["Z", 1324], ["A", 1], ["B", 2], ["C", 3], ["D", -12345]])
const filtered = [...dict.entries()].filter( it => it[1] < 10 )
// > [ [ 'A', 1 ], [ 'B', 2 ], [ 'C', 3 ], [ 'D', -12345 ] ]
export class MapUtils {
static filter<TKey, TValue>(map: Map<TKey, TValue>, filterFunction: (key: TKey, value: TValue) => boolean): Map<TKey, TValue> {
const filteredMap: Map<TKey, TValue> = new Map<TKey, TValue>();
map.forEach((value, key) => {
if (filterFunction(key, value)) {
filteredMap.set(key, value);
}
});
return filteredMap;
}
}
용도:
const filteredMap = MapUtils.filter(map, (key, value) => value > 0)
이것은 사용합니다.Object.entries지도를 배열로 변환합니다.Object.fromEntries지도로 다시 변환합니다.
let qs = {a:'A 1',b:null,c:'C 3'};
let qsfiltered = Object.fromEntries(
Object.entries(qs).filter(([k,v]) => v !== null)
);
console.log(JSON.stringify(qsfiltered));
먼저 지도를 평평하게 만든 다음 내용을 추출해야 합니다.Events물건
let dataSet = {
"entry1" : { id: "85d55e6b-f4bf-47b0" },
"entry2" : { visitor_id: "6665b-7555bf-978b0" }
}
let flattenedMap = {};
Object.entries(dataSet).forEach(
([key,value]) => Object.assign(flattenedMap, value)
);
console.log("The flattened Map")
console.log(flattenedMap)
let events = [];
Object.entries(flattenedMap).forEach(
([key, value]) => events.push({"event_id" : value})
);
console.log("The events");
console.log(events);
언급URL : https://stackoverflow.com/questions/46605403/is-it-possible-to-filter-a-map-by-value-in-typescript
반응형
'programing' 카테고리의 다른 글
| 새 스레드에서 간단한 코드를 실행하려면 어떻게 해야 합니까? (0) | 2023.06.27 |
|---|---|
| 왜 글로벌 변수는 사악한가요? (0) | 2023.06.27 |
| Vuex 스토어에서 매개 변수를 사용하여 시작할 때 구성 요소에서 데이터 가져오기 (0) | 2023.06.27 |
| 피드 및 팔로우 시스템을 구성하는 방법은 무엇입니까? (0) | 2023.06.27 |
| SEEK_CUR과 함께 제로 오프셋 infseeek() 함수가 사용되는 용도는 무엇입니까? (0) | 2023.06.27 |