Как я могу настроить этот код, чтобы он возвращал только нулевые, неопределенные или пустые значения - PullRequest
0 голосов
/ 03 декабря 2018

абсолютно новый для nodeJS, поэтому, пожалуйста, потерпите меня.

Мне нужна помощь в отношении функциональности, которую я пытаюсь создать, в основном я пытаюсь вернуть все пустые, нулевые или неопределенные значения из объекта, используяфильтр, но не уверен, как это сделать.

Это некоторый код, который я нашел в Интернете, который показывает, как удалять пустые значения, но вместо того, чтобы удалять, я хочу, чтобы он отображал все значения, которые являются нулевыми, неопределенными илипусто (это будет включать ключ и значение).

Код выглядит следующим образом:

const myObj = { 
  a: 1,
  b:'foo',
  c: '',
  d: null,
  e: undefined,
  f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
  };

const removeEmpty = (obj) => {
  Object.keys(obj).forEach(k =>
    (obj[k] && typeof obj[k] === 'object') && removeEmpty(obj[k]) ||
    (!obj[k] && obj[k] !== undefined)
  );
  return obj;
};

console.log(removeEmpty(myObj));

Вся помощь очень ценится.

Спасибо за чтение

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Я бы написал функцию, которая рекурсивно просматривает все значения объекта и удаляет ненужные.В нашем случае нам не нужны допустимые значения.

Я имею в виду следующий код

function deleteValues(myObj) {
   for (let key in myObj) {
      if (myObj[key]) {
        if (typeof myObj[key] == 'object') { 
          deleteValues(myObj[key]);
         } else {
            delete myObj[key];
         }
      }
    }
 }

 deleteValues(myObj);
0 голосов
/ 03 декабря 2018
    for (const key in myObj) if ([null, undefined].includes(myObj[key])) console.log(`myObj[${key}] is ${myObj[key]}`);

Это покажет вам ваши неопределенные или нулевые значения в этом объекте, и это все, что вам нужно, верно?Если я не прочитал вопрос неправильно.

0 голосов
/ 03 декабря 2018

Не уверен, где вы взяли свой фрагмент кода, но, похоже, он никак не изменяет объект.Ниже должно работать, прокомментировано, чтобы помочь вам понять это.Поскольку объекты передаются по ссылке, мы можем использовать любое свойство, которое является объектом для обработки вложенных случаев.

const myObj = { 
  a: 1,
  b:'foo',
  c: '',
  d: null,
  e: undefined,
  f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
  };

const removeEmpty = (obj) => {
  Object.keys(obj).forEach(k => {//for each property of the object
    if(obj[k] === null){
      delete obj[k];//special case for null since typeof null returns "object" :-(
    }else if(typeof obj[k] === 'object'){//if the property IS an object
      removeEmpty(obj[k]);//recurse
    }else if(! obj[k]){//if property is falsey (undefined, "", 0)
      delete obj[k];//remove it from the object
    }
  });
  return obj;
};

console.log(removeEmpty(myObj));

РЕДАКТИРОВАТЬ

если вы хотите получить объект, который содержит только пустые значения, вы можете изменить код как таковой:

const myObj = { 
  a: 1,
  b:'foo',
  c: '',
  d: null,
  e: undefined,
  f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
  };

const removeNotEmpty = (obj) => {
  Object.keys(obj).forEach(k => {//for each property of the object
    if(typeof obj[k] === 'object' && obj[k] !== null){//if the property IS an object
      removeNotEmpty(obj[k]);//recurse
    }else if(obj[k]){//if property is truthy
      delete obj[k];//remove it from the object
    }
  });
  return obj;
};

console.log(removeNotEmpty(Object.assign({},myObj)));//make sure to copy the object if you don't want to modify the first (that's what the Object.assign is for)
...