Как найти, если ключ объекта существует? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть следующий объект

acn: "02 0002 0002"
id: "random"
name: "random"
parent_domain: "parent-random"
subDomainData: {random-l3.1: {…}}
sub_domains: ["random-l3.1"]
timestamp: 1549597441

, а subDomainData - это еще один объект, который может существовать или не существовать.Если он существует, он может иметь другой subDomainData, у которого может быть один или несколько дочерних элементов, или нет, и т. Д.

Я сомневаюсь, как создать функцию, чтобы рекурсивно проверять ее, и, если она истинна, выдвигать ее объектв другой массив;Ожидаемый конечный массив будет выглядеть примерно так:

[
    {
      acn: "02 0002 0002"
      id: "random"
      name: "random"
      parent_domain: ""
      sub_domains: ["random-l3.1"]
      timestamp: 1549597441
    },
    { // this object would be the result of the parent subDomainData Object.
      acn: "02 0002 0002"
      id: "random-sub-1"
      name: "random-sub-1"
      parent_domain: "parent-random"
      sub_domains: ["random-l3.3"]
      timestamp: 1549597441
    }
  ]

Сейчас я придерживаюсь этого подхода, которого оказалось недостаточно:

formatDomainList = () => {
const { domain } = this.props;
const domainList = Object.values(domain.subDomainData);
domainList.map(item => (
  Object.keys(item.subDomainData).length && (
    domainList.push(item.subDomainData)
  )
  //etc
  //etc
));
// console.log('domain list', domainList);

}

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

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

var sourceObj = {
  "till-11.1": {
    _id: "domains/8999693",
    _key: "8999693",
    _rev: "_YFjlOei--_",
    acn: "01 0001 0001",
    activated: false,
    id: "till",
    name: "Till Payments",
    timestamp: 1549838701,
    sub_domains: ["till-l2.1", "till-l2.2"],
    parent_domain: null,
    subDomainData: {
      "till-l2.1": {
        _id: "domains/8999741",
        _key: "8999741",
        _rev: "_YFgLFKW--_",
        acn: "02 0002 0002",
        activated: false,
        id: "till-l2.1",
        name: "Till l2-1",
        timestamp: 1549597441,
        sub_domains: ["till-l3.1"],
        parent_domain: "till",
        subDomainData: {
          "till-l3.1": {
            _id: "domains/9001753",
            _key: "9001753",
            _rev: "_YFghVqi--_",
            acn: "",
            activated: true,
            id: "till-l3.1",
            name: "till l3.1",
            timestamp: 1549598900,
            sub_domains: [],
            parent_domain: "till-l2.1",
            subDomainData: {},
            accessDomains: []
          }
        },
        accessDomains: ["till-l3.1"]
      },
      "till-l2.2": {
        _id: "domains/8999780",
        _key: "8999780",
        _rev: "_YFgLcri--_",
        acn: "02 0002 0002",
        activated: false,
        id: "till-l2.2",
        name: "Till l2-2",
        timestamp: 1549597465,
        sub_domains: [],
        parent_domain: "till",
        subDomainData: {},
        accessDomains: []
      }
    },
    accessDomains: ["till-l2.1", "till-l2.2", "till-l3.1"]
  }
};

var result = [];

const checkSubDomainData = obj => {
  Object.keys(obj).forEach(key => {
    if (obj[key].subDomainData !== {}) {
      let innerObjs = obj[key].subDomainData;
      delete obj[key].subDomainData;
      result.push(obj[key]);
      checkSubDomainData(innerObjs);
    } else {
      return;
    }
  });
};

checkSubDomainData(sourceObj);

console.log(result);
0 голосов
/ 18 февраля 2019

Нечто подобное будет работать для вас:

//This is your original object
var someObject = {
  acn: "02 0002 0002",
  id: "random",
  name: "random",
  parent_domain: "parent-random",
  subDomainData: { someObjectWith_subDomainData },
  sub_domains: ["random-l3.1"],
  timestamp: 1549597441
 };
 //This will store the list of subDomains in this global variable.
 var subDomainList = [];

 function getSubDomainList(objectToLoop){

  if(objectToLoop.hasOwnProperty('subDomainData')){
    var numOfItems = Object.keys(objectToLoop.subDomainData).length;
    var keys = Object.keys(objectToLoop.subDomainData);
    for(var i = 0; i< numOfItems; i++){
        var key = keys[i];
        var obj = objectToLoop.subDomainData[key];
        subDomainList.push(obj);
        getSubDomainList(obj);
    }
   }
   return;
 }

 getSubDomainList(someObject);
 //The subDomainList will have the array of objects.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...