Добавление состояний к странам из данных API

#javascript #json #vue.js #vuejs2 #vue-component

#javascript #json #vue.js #vuejs2 #vue-компонент

Вопрос:

У меня есть API, который возвращает данные в следующем формате:

 [
 {
  "id": 12,
  "acf": {
    "address": {
      "city": "Bandar Penawar",
      "state": "Johor",
      "country": "Malaysia",
   }
 },
 {
  "id": 16,
  "acf": {
    "address": {
      "city": "Some City",
      "state": "Arizona",
      "country": "United States",
   }
 }
]
 

Прямо сейчас я получаю список стран и состояний со следующим вычисляемым кодом:

 computed: {
    countries() {
      const countries = new Set();
      this.$store.state.posts.forEach((post) =>
        countries.add(post.acf.address.country)
      );
      return Array.from(countries);
    },
    states() {
      const states = new Set();
      this.$store.state.posts.forEach((post) =>
        states.add(post.acf.address.state)
      );
      return Array.from(states);
    },
  },
 

Это возвращает два отдельных массива, countries и states как я могу упорядочить массив по странам, а затем состояния в этой стране?

 
 

Комментарии:

1. В каком формате вы хотите получить данные?

2. Пока кажется, что вложенный массив будет работать отлично! Я не могу понять, как добавить соответствующие состояния к их странам.

Ответ №1:

Вы могли бы использовать словарь, ключом которого является название страны, а значением — массив состояний:

 computed: {
  dictionary() {
    const dictionary = {};
    this.$store.state.posts.forEach(post => {
      const c = post.acf.address.country;
      const s = post.acf.address.state;
      dictionary[c] = dictionary[c] || [];
      !dictionary[c].includes(s) amp;amp; dictionary[c].push(s);
    });
    return dictionary;
  }
}
 

Обработка дубликатов: если оператор amp;amp; / push выглядит странно, это похоже на короткий if оператор, проверяющий, есть ли состояние уже в списке, и достигает только оператора push, если нет

Комментарии:

1. Если я вас неправильно понял, это лучший способ сделать то, что вы просили. Вложенные массивы состояний, и вы можете v-for использовать их как для названий стран, так и для названий штатов.