Pregunta

¿Cómo obtendría una gama de elementos de mi xmllist similar al método Slice para una matriz?

Slice (startIndex, endIndex);

Estoy intentando algo como esto:

            var tempXMLList:XMLList = new XMLList();

            for( var i:int = startIndex; i <= endIndex; i++){
                tempXMLList += originalList[i];
            }

Pero estoy recibiendo un error de que no puede convertir Originallist [i

--- Actualizar ---

Usé la función de Timofei y funcionó perfectamente.

private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
    return xmllist.(childIndex() >= startIndex && childIndex() <= endIndex);
}

Sin embargo, cuando uso un xmllist que ya se filtró, se rompe.

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());

producción

filteredData.length(): 55
start: 0 end: 55
pdata length: 5
¿Fue útil?

Solución

Use E4X.

private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
    return xmllist.(childIndex() >= startIndex && childIndex() <= endIndex);
}

Actualizar:

Hay un problema, si va a utilizar esta función después de una clasificación E4X, porque la función ChildIndex () devuelve los valores antiguos de los índices de los nodos y no se puede cambiar. Entonces, tengo otra idea:

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;
}

o solo

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;
}

Esta es la mejor variante, creo. Por supuesto, la declaración E4X de una línea es mucho más elegante, pero desafortunadamente no es reutilizable.

Otros consejos

No estoy seguro de cómo espera que funcione, pero puede iterar a través de todos los niños, y guardar cada uno en una matriz y luego recortarlos de esa manera

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top