Общее количество TBD по родительскому элементу в данных Json в JavaScript / Nodejs

В приведенных ниже данных JSON есть EmployeeNumber с TBD и Number. Мне нужно было бы только TBD счетчик из JSON и прикрепить к нему родительский элемент.

var myJson = {
"Name": "Sam",
"EmployeeNumber": "002",
 "IsManager":"True",
 "children": [{
        "Name": "Ravi",
       "EmployeeNumber": "0008",
         "IsManager":"True",
        "children": [{
                "Name": "Krishna",
                "EmployeeNumber": "TBD"
            }, {
                "Name": "diwakar",
                "EmployeeNumber": "007"
            },
            {
                "Name": "Dillep",
                "EmployeeNumber": "009"
            },
            {
                "Name": "David",
                "EmployeeNumber": "009"
            },
            {
                "Name": "Nicholes",
                "EmployeeNumber": "TBD"
            },
            {
                "Name": "Hari",
                "EmployeeNumber": "TBD"
            }
        ]
    },
    {
        "Name": "Rahul",
        "EmployeeNumber": "TBD"
    },
    {
        "Name": "Kiran",
        "EmployeeNumber": "TBD"
    }, {
        "Name": "Kumar",
        "EmployeeNumber": "TBD"
    },
    {
        "Name": "AJAy",
        "EmployeeNumber": "TBD"
    }
]

}

Из приведенного выше JSON я хотел бы иметь общий счетчик TBD и добавить счетчик к имени родителя: Сэм = 4TBD / 0FTE и счетчик TBD детей к Рави = 3TBD / 3FTE, и если IS Manager имеет значение True

Ожидаемый результат:

var myJson = {
"Name": "Sam",
"EmployeeNumber": "002",
"IsManager": "Ture",
"Count": "4TBD/0FTE",
"children": [{
        "Name": "Ravi",
        "EmployeeNumber": "TBD",
        "IsManager": "Ture",
        "Count": "3TBD/3FTE",
        "children": [{
                "Name": "Krishna",
                "EmployeeNumber": "TBD"
            }, {
                "Name": "diwakar",
                "EmployeeNumber": "007"
            },
            {
                "Name": "Dillep",
                "EmployeeNumber": "009"
            },
            {
                "Name": "David",
                "EmployeeNumber": "009"
            },
            {
                "Name": "Nicholes",
                "EmployeeNumber": "TBD"
            },
            {
                "Name": "Hari",
                "EmployeeNumber": "TBD"
            }
        ]
    },
    {
        "Name": "Rahul",
        "EmployeeNumber": "TBD"
    },
    {
        "Name": "Kiran",
        "EmployeeNumber": "TBD"
    }, {
        "Name": "Kumar",
        "EmployeeNumber": "TBD"
    },
    {
        "Name": "AJAy",
        "EmployeeNumber": "TBD"
    }
]

}

Я пробовал с одним ниже

    var annCtr=[];
    var annFtr=[];
    arr.forEach(function(myJSON) {
    var ctr=[];
    var ftr=[];
     if (myJSON.EmployeeNumber == "TBD") {
        annCtr.push(myJSON.EmployeeNumber);
        ctr.push(myJSON.EmployeeNumber);
       }
    else
    {
    annFtr.push(myJSON.EmployeeNumber);
    ftr.push(myJSON.EmployeeNumber);
    //console.info("FTR :"+myJSON.EmployeeNumber+" Name "+myJSON.Name);
    }
//console.info("Length CTRCT for each loop: "+ctr.length);
//console.info("Length FTE for each loop: "+ftr.length);
})
function children(myJSON) {
  return myJSON.children;
  console.info(d.children);
}
console.info("Total Length FTE for : "+annFtr.length);
console.info("Total Length CTRCT for: "+annCtr.length);
console.info('//////////////////////////////////////////');

Заранее спасибо за помощь

вы хотите только общее количество TBD? Потому что я могу сделать это с помощью сокращения + рекурсия. но у вас есть FTE и CTRCT, которые не понимают, что они собой представляют

Chris Li 10.09.2018 18:44

Мне нужны TBD и FTE. Оба TBD - это не что иное, как (CTRCT)

Sri 10.09.2018 18:48

ты действительно должен объяснить, что они означают

Chris Li 10.09.2018 18:48

Ссылаясь на JSON выше: TBD означает количество контрактных сотрудников в родительской компании, а номер - FTES. Мне нужно общее количество подрядчиков и FTE в каждой родительской компании.

Sri 10.09.2018 18:51

Если я правильно понимаю, ваш вариант использования сбивает с толку. На входе 5 FTE первых. в ожидаемом написано 4. Что там происходит?

CRayen 10.09.2018 18:53

Для родителя: Сэм, я бы посчитал Рахула, Кирана, Кумара, Аджая, который содержит все TBD (4) 4TBD / 0FTE Для родителя: Ravi я бы посчитал Кришну, diwakar, Dilip, David, Nicholes, Hari, который содержит 3TBD / 3FTE

Sri 10.09.2018 19:00

Найдите фрагмент кода в приведенном ниже ответе. Надеюсь, это поможет! Кроме того, я думаю, вы не можете сосчитать менеджера (Рави), который подчиняется Сэму. Таким образом, у Сэма было бы 4 ТБД / 1 ФТЭ.

CRayen 10.09.2018 19:02

Да, наверное, мне не хватало и для подсчета Рави. Но как мне подсчитать при Рави?

Sri 10.09.2018 19:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Надеюсь, что приведенный ниже фрагмент поможет вам.

var myJson = {
"Name": "Sam",
"EmployeeNumber": "002",
 "IsManager":"True",
 "children": [{
        "Name": "Ravi",
       "EmployeeNumber": "0008",
         "IsManager":"True",
        "children": [{
                "Name": "Krishna",
                "EmployeeNumber": "TBD"
            }, {
                "Name": "diwakar",
                "EmployeeNumber": "007"
            },
            {
                "Name": "Dillep",
                "EmployeeNumber": "009"
            },
            {
                "Name": "David",
                "EmployeeNumber": "009"
            },
            {
                "Name": "Nicholes",
                "EmployeeNumber": "TBD"
            },
            {
                "Name": "Hari",
                "EmployeeNumber": "TBD"
            }
        ]
    },
    {
        "Name": "Rahul",
        "EmployeeNumber": "TBD"
    },
    {
        "Name": "Kiran",
        "EmployeeNumber": "TBD"
    }, {
        "Name": "Kumar",
        "EmployeeNumber": "TBD"
    },
    {
        "Name": "AJAy",
        "EmployeeNumber": "TBD"
    }
]
}

function getReporteeCount(employee) {
employee.count = employee.children.reduce( (result,child) => {
if (child.IsManager)
  getReporteeCount(child);
if (child.EmployeeNumber === 'TBD')
result.TBDCount = result.TBDCount + 1;
else 
result.FTECount = result.FTECount + 1;

return result}, {FTECount:0 , TBDCount:0})
}

getReporteeCount(myJson)

console.info(myJson)

Это результат, который я получаю после запуска вышеуказанного кода в javascript / nodejs: i.stack.imgur.com/TzuRD.png

Sri 11.09.2018 01:59

Я считаю, что это ожидаемый результат.

CRayen 11.09.2018 02:08

Но когда я проверяю фрагмент кода запуска, он дает правильный результат в StackOverflow

Sri 11.09.2018 02:10

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

CRayen 11.09.2018 02:11

Я использую node v8.9.4, и я пробовал онлайн-компилятор узлов, но везде, где o / p такое же, я не уверен, чем вывод компилятора StackOverflow отличается от того, что я получаю FYI (компилятор Nodejs, который я пробовал): tutorialspoint.com/execute_nodejs_online.php

Sri 11.09.2018 02:31

Вы упоминаете count: Object как разницу?

CRayen 11.09.2018 02:34

Да, я имею в виду, что в StackOverflow я вижу данные под Ravi на выходе и подсчитываю

Sri 11.09.2018 02:35

Это проанализированный JSON. Вы можете напрямую обращаться к объектам по свойствам. Если вы хотите увидеть строку JSON, вам нужно будет преобразовать ее в строку. Используйте console.info(JSON.stringify(myJson)) вместо console.info(myJson)

CRayen 11.09.2018 02:45

Большое спасибо, CRayen

Sri 11.09.2018 02:47

Другие вопросы по теме