Как перебрать только ключи верхнего уровня вложенного объекта с помощью javascript? - PullRequest
0 голосов
/ 17 апреля 2019

Например, если бы я перебрал следующий объект:

{
  "Crows": {
    "players": {
      "Ben": {
        "jersey #": "1B"
      },
      "Ty": {
        "jersey #": "2B"
      }
    }
  },
  "Pigeons": {
    "players": {
      "Bill": {
        "jersey #": "1B"
      },
      "Tim": {
        "jersey #": "2B"
      }
    }
  },
  "Seagulls": {
    "players": {
      "Bob": {
        "jersey #": "1B"
      },
      "Tom": {
        "jersey #": "2B"
      }
    }
  }
}

Я хочу только перебирать и манипулировать ключами верхнего уровня, которые в данном случае являются "Воронами", "Голубями",и "Чайки".

Когда я пытаюсь выполнить итерацию с традиционным циклом for (var key in data), ключ console.log дает мне каждый ключ в объекте, включая вложенные, такие как "Players".Как бы я перебрал только родительские ключи?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Во-первых, JSON - это строковый формат для передачи данных по HTTP / HTTPS.Вы не выполняете итерацию JSON, вы анализируете его обратно в обычный объект JavaScript, а затем делаете с этим объектом все, что вам нравится.То, что вы опубликовали, представляет собой простой объект JavaScript, так что похоже, что вы уже выполнили этот анализ.

Итак, в вашем случае:

let result = {
  "Crows": {
    "players": {
      "Ben": {
        "jersey #": "1B"
      },
      "Ty": {
        "jersey #": "2B"
      }
    }
  },
  "Pigeons": {
    "players": {
      "Bill": {
        "jersey #": "1B"
      },
      "Tim": {
        "jersey #": "2B"
      }
    }
  },
  "Seagulls": {
    "players": {
      "Bob": {
        "jersey #": "1B"
      },
      "Tom": {
        "jersey #": "2B"
      }
    }
  }
};

for(var prop in result){
  console.log(prop);                      // Just get the property name only  
  console.log(result[prop]);              // Or, get the data held in that property
  
  // Or, dig deeper still. Either of the following syntaxes will work:
  console.log(result[prop]["players"]);   
  console.log(result[prop].players);     
}
0 голосов
/ 17 апреля 2019

Либо используйте петлю for...in:

const data = {
  "Crows": {
    "players": {
      "Ben": {
        "jersey #": "1B"
      },
      "Ty": {
        "jersey #": "2B"
      }
    }
  },
  "Pigeons": {
    "players": {
      "Bill": {
        "jersey #": "1B"
      },
      "Tim": {
        "jersey #": "2B"
      }
    }
  },
  "Seagulls": {
    "players": {
      "Bob": {
        "jersey #": "1B"
      },
      "Tom": {
        "jersey #": "2B"
      }
    }
  }
}

for (let key in data) {
  console.log(key);
}

Или соберите их в один массив:

const data = {
  "Crows": {
    "players": {
      "Ben": {
        "jersey #": "1B"
      },
      "Ty": {
        "jersey #": "2B"
      }
    }
  },
  "Pigeons": {
    "players": {
      "Bill": {
        "jersey #": "1B"
      },
      "Tim": {
        "jersey #": "2B"
      }
    }
  },
  "Seagulls": {
    "players": {
      "Bob": {
        "jersey #": "1B"
      },
      "Tom": {
        "jersey #": "2B"
      }
    }
  }
}

console.log(Object.keys(data));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...