Насколько я вижу из ваших данных, вы в первую очередь перебираете массив, а не объект. Это же решение можно использовать и для объекта, однако, необходимо выполнить итерацию по свойствам и элементам массива, если только вы не знаете, что какое-то конкретное свойство всегда будет содержать массив всех объектов.
ЭтоЭто просто пример данных, чтобы сэкономить время:
var data = [
{"id": 50},
{
"id": 35,
"nodes": [
{"id": 3},
{"id": 7},
{
"id": 9,
"nodes": [
{"id": 0},
{"id": 1}
]
},
]
},
];
Следующее, что вы берете свойство, которое находится в объекте, и проверяете, есть ли у него это свойство, которое все время будет иметь значение true.
Я предлагаю вам проверить, является ли конкретное поле массивом, используя Array.isArray и передавая новый массив в recursiveFx.
function getValuesByKey(arr, key) {
var values = [];
recursiveFx(arr);
function recursiveFx(arr) {
for (let el in arr) {
object = arr[el];
for(let property in object){
if(property === key){
values.push(object[property]);
} else if(Array.isArray(object[property])){
recursiveFx(object[property])
}
}
}
}
return values;
}
console.log(getValuesByKey(data, 'id'));