Pergunta

I têm uma matriz esparsa em JScript, com elementos não-nulos que ocorrem em ambos negativos e positivos índices. Ao tentar utilizar um no ciclo, não atravessam a matriz do índice mais baixo (negativa) para a maior índice positivo. Em vez disso, ele retorna a matriz na ordem que os elementos adicionados. não enumeração não quer trabalhar. Existe algum método que permita-me a fazer isso?

Exemplo

arrName = new Array();
arrName[-10] = "A";
arrName[20] = "B";
arrName[10] = "C";

Quando loop através, ele deve me dar uma, em seguida, C a B.

Foi útil?

Solução

Tecnicamente, "A" não é na matriz em tudo desde que você não pode ter um índice negativo. É apenas um membro do objeto arrName. Se você verificar o arrName.length você vai ver que é 21 (0,1,2, ..., 20) Por que você não usar um objeto simples em vez (como uma tabela hash). Algo como isto deve funcionar:

<script type="text/javascript">
//define and initialize your object/hastable
var obj = {};
obj[20] = 'C';
obj[10] = 'B';
obj[-10] = 'A';

// get the indexes and sort them
var indexes = [];
for(var i in obj){
    indexes.push(i);
}
indexes.sort(function(a,b){
    return a-b;
});

// write the values to the page in index order (increasing)
for(var i=0,l=indexes.length; i<l; i++){
    document.write(obj[indexes[i]] + ' ');
}
// Should print out as "A B C" to the page
</script>

Outras dicas

Você está esbarrando no limite entre Arrays e Objects em Javascript. elementos de matriz são acedidos por ordinal, um número inteiro entre 0 e 4294967294 (máximo número inteiro de 32-bit sem sinal - 1), inclusive. As propriedades do objeto são acessados ??pelo nome. Desde -10 não é um número ordinal válido, ele é interpretado como um nome. Aqui está um exemplo simples:

var arr = new Array();
arr[0] = 'A';
arr[1] = 'B';
arr[-1] = 'C';
arr.length

O resultado é 2 -., Existem apenas dois elementos na matriz, em índices de 0 e 1

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top