Как вернуть определенную часть Json как независимый объект? - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть объект Json, как показано ниже:

{
  id : 0,
  cnt: 1,
  someStuff : 'lalala',
  1: {
    id : 1,
    cnt: 2,
    someStuff : 'allgood',
    1: {
      id : 2,
      cnt: 0,
      someStuff: 'nice'
    },
    2: {
      id : 3,
      cnt : 0,
      someStuff: 'nice2'
    }
  }
}

И все, что я хочу сделать, это вернуть некоторую часть этого Json как независимый объект.Если я использую эту функцию:

function CurrentNodeReturn(obj, idReturn) {
    if (idReturn == 0) { return obj; }
    for (var i = 1; i < obj.cnt + 1; i++) {
        if (obj[i].id == idReturn) {
            return obj[i];
        } else {
            return CurrentNodeReturn(obj[i], idReturn);
        }
    }
}

, я могу получить тот же объект, который отправляю с Id = 0.Также я могу получить отдельный объект с идентификаторами 1 и 2. Но когда мне нужно получить объект с id = 3, я получаю только «неопределенные» ошибки в журнале консоли.Итак, как я могу улучшить алгоритм моей функции, если каждый раз, когда я вызываю функцию CurrentNodeReturn с параметрами (все основные объекты, которые я упомянул, идентификатор узла, который должен быть возвращен в начальную точку вызова)?

1 Ответ

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

Как я могу улучшить алгоритм работы моей функции, если каждый раз, когда я вызываю функцию CurrentNodeReturn с параметрами?

Сначала вы должны изменить условие остановки, чтобы проверить, соответствует ли идентификатор или объектне определено.

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

const data = { id : 0, cnt: 1, someStuff: 'lalala', 1: { id : 1, cnt: 2, someStuff: 'allgood', 1: { id : 2, cnt: 0, someStuff: 'nice' }, 2: { id : 3, cnt : 0, someStuff: 'nice2' } } };

function getObject(obj, id) {
  if (!obj || obj.id === id) {
    return obj;
  }
  for (let i = 0; i < obj.cnt; i++) {
    const child = getObject(obj[i + 1], id);
    if (child) {
      return child;
    }
  }
}

console.log(getObject(data, 2))
console.log(getObject(data, 3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...