Как проверить глубину каждого поля объекта в Javascript - PullRequest
0 голосов
/ 29 марта 2020

В моем приложении React Native есть функция навигации, которая выводит на консоль все аргументы, переданные ей в режиме разработчика, и иногда я отправляю большое хранилище аргументов, и оно не может быть выведено. Получите ошибку об объектной ссылке cycli c, потому что объект очень глубокий. Поэтому я решил создать функцию, которая будет проверять все поля объекта и, в зависимости от этого, будет выводить информацию на консоль, например, если поданный объект глубже 1 уровня.

const notDeepObj = {
   name: 'John',
   surname: 'Robert',
   age: 28,
   family: false,
};
const deepObj = {
  name: 'John',
  surname: 'Robert',
  bankAccount: {
    accounts: 2,
    cash: true,
    credit false,
    wasCreated: {
      city: 'New-York',
      date: '12.02.2020.',
    }
  }
}
function checkDepthOfObject(obj){}

В в случае неглубокого объекта он должен возвращать сам объект следующим образом:

checkDepthOfObject(notDeepObj) 
//it will return:
{
   name: 'John',
   surname: 'Robert',
   age: 28,
   family: false,
};

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

checkDepthOfObject(notDeepObj) 
//it will return:
{
   name: 'John',
   surname: 'Robert',
   bankAccount: '[DEEP_OBJECT]'
};

Можете ли вы порекомендовать мне, пожалуйста, лучший способ, как я могу это сделать.

1 Ответ

1 голос
/ 29 марта 2020

Используйте Object.entries и map и проверьте значение typeof.

const notDeepObj = {
  name: "John",
  surname: "Robert",
  age: 28,
  family: false
};
const deepObj = {
  name: "John",
  surname: "Robert",
  bankAccount: {
    accounts: 2,
    cash: true,
    credit: false,
    wasCreated: {
      city: "New-York",
      date: "12.02.2020."
    }
  }
};
function checkDepthOfObject(obj) {
  return Object.fromEntries(
    Object.entries(obj).map(([key, value]) => [
      key,
      typeof value === "object" ? "[DEEP_OBJECT]" : value
    ])
  );
}

console.log(checkDepthOfObject(notDeepObj));
console.log(checkDepthOfObject(deepObj));
...