Slice XMLList вместо Array
Как я могу получить диапазон элементов из моего xmllist, аналогичный методу slice для массива?
срез (StartIndex, ENDINDEX);
Я пытаюсь что-то вроде этого:
var tempXMLList:XMLList = new XMLList();
for( var i:int = startIndex; i <= endIndex; i++){
tempXMLList += originalList[i];
}
Но я получаю сообщение об ошибке, что он не может конвертировать originalList [i]
--- Обновить ---
Я использовал функцию Тимофея, и она отлично работала.
private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
return xmllist.(childIndex() >= startIndex && childIndex() <= endIndex);
}
Однако, когда я использую xmllist, который уже был отфильтрован, он ломается.
filteredData = filteredData.(team == "Ari");
trace("filteredData.length(): " + filteredData.length().toString());
pData = SliceXMLList(filteredData, startIndex, endIndex);
trace("start: " + startIndex.toString() + " end: " + endIndex.toString());
trace("pdata length: " + pData.length().toString());
выход
filteredData.length(): 55
start: 0 end: 55
pdata length: 5
2 ответа
Используйте e4x.
private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
return xmllist.(childIndex() >= startIndex && childIndex() <= endIndex);
}
Обновить:
Есть проблема, если вы собираетесь использовать эту функцию после некоторой сортировки e4x, потому что функция childIndex() возвращает старые значения индексов узлов, и ее нельзя изменить. Итак, у меня есть другая идея:
private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
for (var i : int = 0; i < xmllist.length(); i++)
xmllist[i].@realIndex = i;
xmllist = xmllist.(@realIndex >= startIndex && @realIndex <= endIndex);
for (i = 0; i < xmllist.length(); i++)
delete xmllist[i].@realIndex;
return xmllist;
}
или просто
private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
var newXMLList : XMLList = new XMLList();
var currIndex : int = 0;
for (var i : int = startIndex; i <= endIndex; i++)
newXMLList[currIndex++] = xmllist[i];
return newXMLList;
}
Это лучший вариант, я думаю. Конечно, однострочный оператор e4x намного элегантнее, но, к сожалению, его нельзя использовать повторно.
Не знаю, как вы ожидаете, что это будет работать, но вы можете перебрать все дочерние элементы и сохранить каждого в массив, а затем обрезать их таким образом