TypeScript, 사전을 통한 루프
제 코드에는 String 색인화된 사전이 몇 개 있습니다.이것은 약간 즉흥적인 타입이기 때문에, 각 키(또는 값, 어쨌든 필요한 모든 키)를 루프 할 수 있는 방법이 없는지 궁금했습니다.아무쪼록 잘 부탁드립니다!
myDictionary: { [index: string]: any; } = {};
키/값을 루프하려면for in루프:
for (let key in myDictionary) {
let value = myDictionary[key];
// Use `key` and `value`
}
< ES 2017 :
Object.keys(obj).forEach(key => {
let value = obj[key];
});
>= ES 2017:
Object.entries(obj).forEach(
([key, value]) => console.log(key, value)
);
이건 어때?
for (let [key, value] of Object.entries(obj)) {
...
}
Ian이 언급한 키/값 루프에 대한 주의사항이 하나 있습니다.오브젝트 프로토타입에 속성이 부가되어 있을 수 있는 경우, 그리고 사용 시in연산자, 이러한 속성이 포함됩니다.따라서 키가 프로토타입이 아닌 인스턴스의 속성인지 확인해야 합니다.오래된 IE는 다음과 같은 기능을 갖추고 있는 것으로 알려져 있습니다.indexof(v)열쇠로 나타나다
for (const key in myDictionary) {
if (myDictionary.hasOwnProperty(key)) {
let value = myDictionary[key];
}
}
모든 사전/객체 값을 가져오는 가장 빠른 방법:
Object.keys(dict).map(k => dict[k]);
또는 다음과 같은 방법이 있습니다.
Object.entries(dict).map([k,v] => /* ... */);
만약 당신이inif 문장이 없는 목적어hasOwnProperty그러면 다음과 같은 오류가 linter에서 발생합니다.
for (const key in myobj) {
console.log(key);
}
WARNING in component.ts
for (... in ...) statements must be filtered with an if statement
그래서 해결책은 사용법입니다.Object.keys그리고.of대신.
for (const key of Object.keys(myobj)) {
console.log(key);
}
이 도우미가 린터를 사용하는 사람을 찾길 바랍니다.
Ians Answer도 좋지만 키가 업데이트되지 않으므로 키를 그대로 두는 대신 const를 사용해야 합니다.
for (const key in myDictionary) {
let value = myDictionary[key];
// Use `key` and `value`
}
키를 얻으려면:
function GetDictionaryKeysAsArray(dict: {[key: string]: string;}): string[] {
let result: string[] = [];
Object.keys(dict).map((key) =>
result.push(key),
);
return result;
}
이것은 나의 기능이다. 나는 이것이 도움이 되기를 바란다.
function recordToArray<TypeOfSchema>(
data: Record<string, TypeOfSchema>
): Array<TypeOfSchema> {
return Object.keys(data).map((key: string) => ({ id: key, ...data[key] }));
}
es2019를 통해 이는 더욱 단순해졌습니다.
- 사용할 수 있습니다.
of체계적 - 사전 줄 바꿈 불필요
Object.entries
예:
let someMap: Map<number, number> = new Map()
someMap.set(3, 7);
someMap.set(4, 12);
for (let [key, value] of someMap) {
console.log(key, value)
}
출력:
3 7
4 12
오브젝트 값을 통해서만 루프하는 경우
언급URL : https://stackoverflow.com/questions/16174182/typescript-looping-through-a-dictionary
'programing' 카테고리의 다른 글
| Java에서 pass by reference와 동등한 작업을 수행하는 방법 (0) | 2022.10.23 |
|---|---|
| MySQL 쿼리 실행을 중지하려면 어떻게 해야 합니까? (0) | 2022.10.23 |
| 목록에서 최대값의 모든 위치를 찾으려면 어떻게 해야 합니까? (0) | 2022.10.23 |
| HTML5 WebSockets보다 AJAX의 긴/짧은 폴링은 어떤 상황에서 선호됩니까? (0) | 2022.10.23 |
| MySQL Workbench에서 테이블 생성 스크립트를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.23 |