@WarriorKodeK

Как удалить пустые значение в объекте исключая boolean?

Есть объект:
const obj = {
    group: "rngs",
    includeMedia: false,
    orderBy: "publishedDate",
    topicCodes: []
}


Мне надо исключать все значение, которые пустые: "", [], {}
Boolean значение должны быть
  • Вопрос задан
  • 158 просмотров
Решения вопроса 4
0xD34F
@0xD34F Куратор тега JavaScript
const entries = Object.entries(obj);
const mustBeRemoved = v =>
  (v instanceof Object && !Object.keys(v).length) ||
  (!v && typeof v !== 'boolean');

Собираем новый объект:

const newObj = Object.fromEntries(entries.filter(n => !mustBeRemoved(n[1])));

Удаляем из существующего:

entries.forEach(n => mustBeRemoved(n[1]) && delete obj[n[0]]);
Ответ написан
Комментировать
@artembatura
function filterObject(target) {
  return Object.keys(target).reduce((result, key) => {
    const value = target[key];
    
    if (!value && typeof value !== "boolean") {
        return result;
    }
    
    if (typeof value === "object" && Object.keys(value).length === 0) {
        return result;
    }

    return {
      ...result,
      [key]: value
    };
  }, {});
}
Ответ написан
Комментировать
apospeliri
@apospeliri
const filterObj = Object.keys(obj).filter(key => 
  obj[key].length > 0 || typeof obj[key] === "boolean"
) 
console.log('filterObj :', filterObj)


Я так понимаю смысл 'челенджа' кто напишет это короче :)
Ответ написан
@lloydbanks
const filterObj = (obj) => 
    Object.keys(obj).reduce((o, k) => {
        if ((typeof obj[k] === 'boolean') || obj[k] && Object.keys(obj[k]).length) o[k] = obj[k]

        return o
    }, {})

filterObj(obj)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы