Как сделать поиск по ключу

Сама задача:

Создать функцию которая выводит название самой удаленной планеты до которой способен долететь космонавт на космическом корабле с запасом хода (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 шт):

Автор решения: Andrey Semykin

Вообще-то, в вашем примере Земля в массиве 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;
}
→ Ссылка