#javascript #arrays #vue.js #vuejs2 #vue-component
#javascript #массивы #vue.js #vuejs2 #vue-компонент
Вопрос:
Я пытаюсь изменить значение элемента в массиве на основе сопоставления других элементов в массиве. Массив может содержать сведения о разделе (неуникальный), уникальный идентификатор и значение, которое я хочу изменить (в данном случае «выбранный» флаг). Цель состоит в том, чтобы иметь возможность иметь несколько элементов, которые могут иметь свой выбранный флаг. В пределах любого отдельного раздела может быть «выбран» только один элемент, но в нескольких разделах может быть «выбран» отдельный элемент. Концептуально, я думаю, это можно рассматривать так же, как наличие нескольких групп переключателей.
Конечная цель — иметь возможность использовать state
для запоминания выборки, сделанные в компоненте, который создается с использованием реквизита. Я очень хочу понять, а не просто скопировать. Далее я разберусь с мутациями состояния, но лучше сначала решить эту проблему.
Итак, возьмите массив, подобный:
menuItems: [
{
section: 'National',
id: 'First item',
selected: false
},
{
section: 'National',
id: 'Second item',
selected: false
},
{
section: 'National',
id: 'Third item',
selected: true
},
{
section: 'Local',
id: 'Fourth item',
selected: false
},
{
section: 'Local',
id: 'Fifth item',
selected: false
},
{
section: 'Local',
id: 'Sixth item',
selected: true
}
]
И некоторые строки поиска, такие как:
searchSection: 'National',
searchId: 'First item'
Как бы я создал функцию, которая могла бы изменить выбранный флаг элемента id: First item
на true, остальные (второй, третий элемент) на false и ничего не менять в разделе «Local»?
Я безуспешно пытался разобраться с использованием forEach
циклов, хотя это кажется правильным подходом. Использование findIndex
для раздела, похоже, обречено на неудачу, поскольку необходимо найти несколько элементов.
Сначала вопрос SO — поэтому упреждающие извинения, если проблемы с тем, как я спросил. Я использую Vue3. Все советы приветствуются.
Ответ №1:
Цикл проверки элементов для правильного раздела. Для раздела, если есть id
совпадение, установите selected
значение true, в противном случае установите selected
значение false:
methods: {
flag(searchSection, searchId) {
this.menuItems.forEach(item => {
if (item.section === searchSection) {
item.selected = item.id === searchId;
}
});
}
}
Вызов функции:
this.flag('National', 'First item');