Если у Вас есть Javascript 1.6, или позже можно использовать Array.filter
использование тривиального return true
функция обратного вызова, например:
arr = arr.filter(function() { return true; });
с тех пор .filter
автоматически пропуски недостающие элементы в исходном массиве.
страница MDN, связанная выше также, содержит хорошую версию проверки ошибок filter
, который может использоваться в интерпретаторах JavaScript, которые не поддерживают официальную версию.
Примечание, которое это не удалит null
записи, ни записи с явным undefined
значение, но OP конкретно требуемые "недостающие" записи.
Рекурсия - одна из причин, почему мне нравятся XML-литералы VB.NET!
Для выполнения рекурсии вам нужна функция, которая принимает коллекцию ProfileItems и возвращает XElement. Затем вы можете рекурсивно вызывать эту функцию внутри XML-литерала.
Кроме того, для того, чтобы рекурсия работала, GetProfileItems и GetDependencies должны иметь одинаковое имя (переименовать одно из них) и отображаться с той же структурой элемента Xml. Вот как может выглядеть рекурсивная функция:
Function GetProfileItemsElement(ByVal Items As List(Of ProfileItem) As XElement
Return <items>
<%= From i In Items _
Select <item>
<name><%= i.Name %></name>
<!-- other elements here -->
<%= GetProfileItemsElement(i.GetDependencies) %>
</item> %>
</items>
End Function
Рекурсия завершится, когда вы дойдете до элемента, который возвращает пустой список для функции GetDependencies. В этом случае вложенный элемент items
будет пустым:
. XML-литералы достаточно умны, чтобы комбинировать начальные и конечные теги items
при отсутствии дочерних элементов.