Конечно, это дает неправильный результат.
Вы можете изменить порядок опций и массива с одинаковыми значениями на один и тот же индекс.
Или вы можете найти значение в списке данных и взять id
как abbrName
.
function result() {
var a = n.value;
document.getElementById("stateName").innerHTML = a;
myObj.info.forEach(function (e, z) {
var q = document.getElementById("stateName").innerHTML;
if (e.properties.id == q) {
document.getElementById("statePosition").innerHTML = z;
document.getElementById("statePopulation").innerHTML = myObj.info[z].properties.population;
}
});
document.getElementById("abbrName").innerHTML = [].find.call(document.getElementById('myInput').getElementsByTagName('option'), ({ value }) => value === a).id;
}
Использует массив как объект
document.getElementById('myInput').getElementsByTagName('option')
заимствует Array#find
из массива и принимает указанный выше массив как объект в качестве this
объектов вместе с Function#call
.
Как find
Обратный вызов
({ value }) => value === a
a происходит деструктурирующее присваивание , где берется только одно свойство итерируемого объекта, а затем сравнивается с заданным значением.
Если сравнение возвращает true
, объект найден и возвращен из find
. Тогда требуется id
собственность.