Отфильтровать объект по условию и записать результат в новый объект

Нужно отфильтровать объект по условию что его значения больше или равно 18:

console.log(getAdults({ 'John Doe': 19, Tom: 17, Bob: 18}));
        
// Output: { 'John Doe': 19, Bob: 18 }
        
console.log(getAdults({ Franky: 7, Ann: 40 })); 
    
// Output: { Ann: 40 }

Только начал учить объекты, но именно такой информации не нашел в интернете. Хочу разобраться как это работает пока что с помощью цикла for..in

const getAdults = obj => {

    let filteredObj = {};

    for (let key in obj) {
        if (obj[key] >= 18) {
            filteredObj = obj;
        }
        return filteredObj;
    }
};

Помогите пожста исправить код чтобы условие выполнилось.


Ответы (1 шт):

Автор решения: Алексей Шиманский

return сразу прерывает цикл и выходит из него. return надо ставить в конце метода. А вообще можно пойти по обратному пути: если значение меньше 18, то удалить ключ из объекта. Если хочется, чтобы объект не изменялся, то в начале метода, можно работать с копией

const getAdults = obj => {    
    for (let key in obj) {        
        if (obj[key] < 18) {
            delete(obj[key]);            
        }        
    }

    return obj;
};

console.log(getAdults({ 'John Doe': 19, Tom: 17, Bob: 18}));

В целом можно сделать так:

const getAdults = obj => {    
    let filteredObj = {};
    
    for (let key in obj) {        
        if (obj[key] >= 18) {
            filteredObj[key] = obj[key];            
        }        
    }

    return filteredObj;
};

console.log(getAdults({ 'John Doe': 19, Tom: 17, Bob: 18}));

→ Ссылка