#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
использовать их как для названий стран, так и для названий штатов.