Как сделать поиск по ключу
Сама задача:
Создать функцию которая выводит название самой удаленной планеты до которой способен долететь космонавт на космическом корабле с запасом хода (40 млн км., 150 млн км., 1600 млн км.) при условии отправления с планеты Земля. Если космонавт не в состоянии долететь ни до одной планеты, то необходимо вывести - “невозможно долететь до ближайшей планеты“
let mer = {
name: "Меркурий",
weight: 0.055,
distance: 57910006,
rings: false
};
let ven = {
name: "Венера",
weight: 0.815,
distance: 108199995,
rings: false
};
let earth = {
name: "Земля",
weight: 1,
distance: 149599951,
rings: false
};
let mars = {
name: "Марс",
weight: 0.107,
distance: 227939920,
rings: false
};
let jup = {
name: "Юпитер",
weight: 317.8,
distance: 778330920,
rings: false
};
let sat = {
name: "Сатурн",
weight: 317.7,
distance: 1429400028,
rings: true
};
let ur = {
name: "Уран",
weight: 14.37,
distance: 2870989228,
rings: true
};
let nep = {
name: "Нептун",
weight: 17.15,
distance: 4504299579,
rings: true
};
let planets = [earth, mer, ven, jup, mars, sat, ur, nep];
function distant_planet(planets) {
let dist = [40000000, 150000000, 1600000000];
let name_planet = [];
let name_planet_ready = [];
let name_planet_cr = [];
for (let j = 0; j < dist.length; j++) {
for (let i = 0; i < planets.length; i++) {
rast = Math.abs(planets[i].distance - planets[3].distance);
if (rast < dist[j] && rast != 0) {
planets[i]["rast"] = rast;
name_planet.push(planets[i]);
}
}
if (name_planet.length == 0){
name_planet_ready.push('невозможно долететь до ближайшей планеты');
}else{
for(var i_1=0; i_1 < name_planet.length; i_1++){
name_planet_cr.push(name_planet[i_1].rast);
}
name_planet_ready.push(Math.max.apply(null, name_planet_cr));
}
}
return name_planet.map.keys();
}
Не могу сделать поиск по ключу и положить значение name в готовый массив
Ответы (1 шт):
Вообще-то, в вашем примере Земля в массиве planets стоит на первом месте. Соответственно, индекс - 0, а не 3. ClickName говорил об этом, насколько понимаю. Впрочем, даже с исправлением этого функция все равно нерабочая. Я бы предложил такой вариант:
let mer = {
name: "Меркурий",
weight: 0.055,
distance: 57910006,
rings: false
};
let ven = {
name: "Венера",
weight: 0.815,
distance: 108199995,
rings: false
};
let earth = {
name: "Земля",
weight: 1,
distance: 149599951,
rings: false
};
let mars = {
name: "Марс",
weight: 0.107,
distance: 227939920,
rings: false
};
let jup = {
name: "Юпитер",
weight: 317.8,
distance: 778330920,
rings: false
};
let sat = {
name: "Сатурн",
weight: 317.7,
distance: 1429400028,
rings: true
};
let ur = {
name: "Уран",
weight: 14.37,
distance: 2870989228,
rings: true
};
let nep = {
name: "Нептун",
weight: 17.15,
distance: 4504299579,
rings: true
};
let planets = [earth, mer, ven, jup, mars, sat, ur, nep];
let dist = [40000000, 150000000, 1600000000];
console.log(dist);
console.log(distant_planet(planets, dist));
function distant_planet(planets, dist) {
let farPlanets = [];
let distanceFromEarth = [];
for (let each of planets){
distanceFromEarth.push({name: each.name, dist: Math.abs(each.distance - earth.distance)});
}
console.log('distanceFromEarth', distanceFromEarth);
for (let d of dist){
maxDistance = 0;
planet = 'невозможно долететь до ближайшей планеты';
for (let each of distanceFromEarth){
if (maxDistance < each.dist && d > each.dist) {
maxDistance = each.dist;
planet = each.name;
}
}
farPlanets.push(planet);
}
return farPlanets;
}