programing

TypeScript, 사전을 통한 루프

goodjava 2022. 10. 23. 21:27

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를 통해 이는 더욱 단순해졌습니다.

  1. 사용할 수 있습니다.of체계적
  2. 사전 줄 바꿈 불필요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