#javascript
#javascript
Вопрос:
В приведенном выше коде я пытаюсь получить объект только с истинными значениями, поэтому я ожидаю получить:
{
_id: 'userId',
username: 'username',
};
const newb = {
_id: 'userId',
username: 'username',
password: undefined
};
const object2 = Object.fromEntries(
Object.entries(newb)
.map(([ key, val ]) => {
console.log(val)
if(val !== undefined) {
return [key, val]
}
})
);
console.log('Success:', object2);
Но теперь я получаю: Iterator value undefined is not an entry object
. Как решить проблему?
Ответ №1:
Вы можете использовать Object.keys()
для перебора собственных перечислимых имен свойств объекта (ключей) вместо использования Object.entries()
и Object.fromEntries()
.
const newb = {
_id: 'userId',
username: 'username',
password: undefined
};
const result = {};
Object.keys(newb).forEach(key=>{
if (newb[key] !== undefined)
result[key] = newb[key];
});
console.log('Success:', result);
Ответ №2:
Каждая функция JavaScript возвращает undefined
по умолчанию. Итак, ваша функция сопоставления возвращает undefined
if val === undefine
, потому что нет else
инструкции, возвращающей допустимый результат.
Ответ №3:
const newb = {
_id: 'userId',
username: 'username',
password: undefined
};
const object2 = Object.fromEntries(Object.entries(newb).filter(entry => entry[1] != null));
console.log('Success:', object2);
Ответ №4:
Вам нужно отфильтровать undefined
свойства:
const newb = {
_id: 'userId',
username: 'username',
password: undefined
};
const object2 = Object.fromEntries(
Object.entries(newb)
.filter(([key,val]) => val != undefined)
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
);
console.log('Success:', object2);
Комментарии:
1. @charlietfl да, удалено только что