JSFiddle - React, Tailwind, and code Playground

by cmruser

JavaScript

function countItems(
  data= [],
  condition
) {
  if (data === null || data === undefined) {
    return [];
  }

  return data.reduce((acc, item) => {
    const itemId = `${item.id}`;
    acc.push(itemId);

    if (condition(item)) {
      const childItems = countItems(item.data, condition);
      acc.push(...childItems);
    }

    return acc;
  }, []);
}

// Example usage of the countItems function
const data = [
  {
    id: 1,
    dataType: 'block',
    data: [
      {
        id: 2,
        data: null
      },
      {
        id: 3,
        data: [
          {
            id: 4,
            data: null
          },
          {
            id: 5,
            data: null
          }
        ]
      },
      {
        id: 6,
        data: null
      }
    ]
  },
  {
    id: 7,
    data: [
      {
        id: 8,
        data: null
      }
    ]
  }
];

// Example condition function
function isEven(item) {
  return item.dataType == 'block';
}

// Call the countItems function
const result = countItems(data, isEven);

// Output the result
console.log(result);