В приведенных ниже данных 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. Оба TBD - это не что иное, как (CTRCT)
ты действительно должен объяснить, что они означают
Ссылаясь на JSON выше: TBD означает количество контрактных сотрудников в родительской компании, а номер - FTES. Мне нужно общее количество подрядчиков и FTE в каждой родительской компании.
Если я правильно понимаю, ваш вариант использования сбивает с толку. На входе 5 FTE первых. в ожидаемом написано 4. Что там происходит?
Для родителя: Сэм, я бы посчитал Рахула, Кирана, Кумара, Аджая, который содержит все TBD (4) 4TBD / 0FTE Для родителя: Ravi я бы посчитал Кришну, diwakar, Dilip, David, Nicholes, Hari, который содержит 3TBD / 3FTE
Найдите фрагмент кода в приведенном ниже ответе. Надеюсь, это поможет! Кроме того, я думаю, вы не можете сосчитать менеджера (Рави), который подчиняется Сэму. Таким образом, у Сэма было бы 4 ТБД / 1 ФТЭ.
Да, наверное, мне не хватало и для подсчета Рави. Но как мне подсчитать при Рави?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Надеюсь, что приведенный ниже фрагмент поможет вам.
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
Я считаю, что это ожидаемый результат.
Но когда я проверяю фрагмент кода запуска, он дает правильный результат в StackOverflow
Чем отличается вывод компилятора stackoverflow от узла? Если вы можете объяснить это, я смогу вам больше помочь.
Я использую node v8.9.4, и я пробовал онлайн-компилятор узлов, но везде, где o / p такое же, я не уверен, чем вывод компилятора StackOverflow отличается от того, что я получаю FYI (компилятор Nodejs, который я пробовал): tutorialspoint.com/execute_nodejs_online.php
Вы упоминаете count: Object как разницу?
Да, я имею в виду, что в StackOverflow я вижу данные под Ravi на выходе и подсчитываю
Это проанализированный JSON. Вы можете напрямую обращаться к объектам по свойствам. Если вы хотите увидеть строку JSON, вам нужно будет преобразовать ее в строку. Используйте console.info(JSON.stringify(myJson)) вместо console.info(myJson)
Большое спасибо, CRayen
вы хотите только общее количество TBD? Потому что я могу сделать это с помощью сокращения + рекурсия. но у вас есть FTE и CTRCT, которые не понимают, что они собой представляют