Есть массив в js или объект, в нем хранятся данные на подобии такого: id="...", name="....". Т.е. у каждого имени есть свой id. Я хочу найди имя по id, т.е. у меня известно id и мне нужно получается найти имя по этому id. Я делаю вот такую конструкцию:
if (vm.filter.roleId != null) {
vm.roles.findIndex(name);// знаю тут ошибка но не знаю как ее изменить
}
Но не работает, подскажите какую конструкцию использовать.
Если у вас используется массив, то нужен как минимум перебор его, через циклы и внутри уже искать нужные данные. Я так понял, что элементы массива это объекты, по типу {id: number, name: string}
Если id или name уникальны, и id имеет не сквозные номера, то проще имхо использовать хэш таблицу (или просто JS объект)
var r = {
id1: name,
id2: name,
id3: name
....
}
тогда искать имя по id можно будет просто
r[id] вернёт имя присвоенное определённому id
А в вашем случае, если менять ничего не хочется, то используйте просто цикл (for | while)
var name;
for (var i = 0, l = vm.roles.length; i < l; i++){
var role = vm.roles[i];
if (role.id == "id") {
name = role.name;
break;
}
}
Тут как минимум ошибка в том, что find возвращает найденный элемент или undefined, если ничего не найдено, а map метод для массива. Если x - объект, то vm.roles.find(x => x.id === vm.filter.roleId).name
Дмитрий, В отладчике смотрю, перебор идет. но он не подставляет в id из vm.filter.roleId в поиск. Он просто перебирает весь массив а когда перебрал то видимо передает пустое значение. Пытался присвоить в скобках if role.id === vm.filter.roleId тож самое)
findIndex ждет функцию в качестве параметра. Если в массиве мы ищем индекс элемента, у которого поле name совпадает со значением в переменной name, то нужно vm.roles.findIndex(item => item.name == name)
если я правильно понял то можно реализовать таким образом, то есть в метод .filter() передаем функцию, с типизацией, где указываем что у нас в объекте есть поле name: string, ну и потом что бы функция фильтр внесла элемент в новый массив мы должны в переданной функции вернуть булево значение, то есть true/false, если будет true то элемента удовлетворяет текущим параметрам и будет добавлен в новый массив и наоборот