Looping through nested arrays with creating new array from nested items I have written this function but I am not so proud on it. I could use some help refactoring it.

Would recursion improve my code?

Data sample.

{  
  "Name":"test2",
  "DepartmentUnitId":"test",
  "ParentDepartmentUnitId":"test",
  "NestedDepartments":[  
    {  
      "Name":"test2",
      "DepartmentUnitId":"test",
      "ParentDepartmentUnitId":"test",
      "NestedDepartments":[]
    },
    {  
      "Name":"test2",
      "DepartmentUnitId":"test",
      "ParentDepartmentUnitId":"test",
      "NestedDepartments":[]
    }
  ]
}


JS:

function indentDepartments(departments, model) {
    var indentedDepartments = [];

    _.each(departments, function (department) {
        indentedDepartments.push(buildDepartment(department, 0));
        _.each(department.NestedDepartments, function (lv1Department) {
            indentedDepartments.push(buildDepartment(lv1Department, 1));
            _.each(lv1Department.NestedDepartments, function (lv2Department) {
                indentedDepartments.push(buildDepartment(lv2Department, 2));
            });
        });
    });

    function buildDepartment(data, level) {
        department = _.pick(data, 'DepartmentUnitId', 'ParentDepartmentUnitId');
        name = _.times(level, function () { return '-'; }).join('') + data.Name;

        _.extend(department, { Name: name });
        return department;
    }
    model.parentDepartments(indentedDepartments);
}


Edit:
Nested array can go 2 levels deep, but I wouldn't mind making this function more scalable.
You could indeed create a recursive function to collect each level of departments, keeping going as long as there are nested departments:

function indentDepartments(departments, model) {

    model.parentDepartments(doIndentDepartments(departments, 0));

    // called recursively to indent each level of department
    function doIndentDepartments(departments, level) {
        // indent departments at current level
        var departments = _.map(departments, function(department) {
            return buildDepartment(department, level);
        });

        // indent nested departments
        if (typeof departments.NestedDepartments != 'undefined') {
            departments.push.apply(departments, doIndentDepartments(departments.NestedDepartments, level +1));
        }

        return departments;
    }

    function buildDepartment(data, level) {
        department = _.pick(data, 'DepartmentUnitId', 'ParentDepartmentUnitId');
        name = _.times(level, function () { return '-'; }).join('') + data.Name;

        _.extend(department, { Name: name });
        return department;
    }
}