Получение истинных значений из объекта

#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 да, удалено только что