На данный вопрос уже ответили:
Привет. С недавних пор решил перейти с for
-цикла на forEach()
, ибо это действительно удобнее. Особенно при работе с вложенными массивами. Обычно у меня всё работало нормально, то теперь вот произошла какая-то чертовщина. У меня есть функция, которая проходится по обычному массиву и сверяет, есть ли в элементе этого массива значение ключа, которое соответствовало бы отправленной к функции в качестве аргумента переменной:
function getDepCountryFlag(dep) {
airports.forEach((airport) => {
if(airport.id == dep) {
return airport.country_code;
}
});
}
Казалось бы, просто как дважды два. Но вот это дело всё время выдавало мне undefined
. Я уже было хотел подзабить и оставить это на завтра, но решил на крайняк уже попробовать старый добрый for
-loop. И мой код чудесным образом перестал отдавать мне undefined и заработал так, как мне и нужно было!
function getDepCountryFlag(dep) {
for(let i = 0; i < airports.length; i++) {
if(airports[i].id == dep)
return airports[i].country_code;
}
}
Вопрос: я что-то упустил при чтении документации по forEach и он не работает по аналогии с for? Почему давал undefined
, а for
заработал?
В этом куске кода:
function getDepCountryFlag(dep) {
airports.forEach((airport) => {
if(airport.id == dep) {
return airport.country_code;
}
});
}
– Вы делаете возврат из анонимной callback-функции, а не из функции getDepCountryFlag
.
function getDepCountryFlag(dep) {
var found = null;
airports.forEach((airport) => {
if (airport.id == dep && !found) {
found = airport;
}
});
return (found)? found.country_code : null;
}
А лучше:
function getDepCountryFlag(dep) {
var found = airports.find((item) => item.id == dep);
return (found)? found.country_code : null;
}
Если уж ты и реализуешь подобные алгоритмы, то делай это используя не только forEach, но и другие итераторы, например Array.find()
function getDepCountryFlag(dep) {
const airPort = airports.find(airport => airport.id == dep);
return airPort ? airPort. country_code : null;
}
Такой код намного читабельнее и локаничнее
Так же советую в JS всегда использовать строгое сравнение типов airport.id === dep
, подробно про это можно почитать тут https://learn.javascript.ru/comparison
Как сделать надежную поддержку websocket на тех браузерах где эта технология не работает? Вычитал что есть несколько сторонних библиотекНо вот...
Добрый день, друзья! Столкнулся с такой проблемойЗадача такая: необходимо вывести данные, которые указал пользователь в столбце select и данные...
Доброе утроСтолкнулся с такой проблемой, хочу взять дату предыдущего дня, но когда дата это первый день в году то работа даты javascript не корректная
Добрый день, подскажите как сделать так что бы "ползунок" не "дрифтовал" по графику, а плавно перетекал, как капля, и повторял изгибы графика?