Como reter array em javascript?
-
06-07-2019 - |
Pergunta
Aqui está um código que tem duas matrizes (np e op), uma cópia do outro
No entanto, quando eu modificar a cópia, o original também é modificado! dar uma olhada:
<script type="text/javascript">
var op=new Array(0, 0);
var np=op;
np[1]=2;
document.write(op+"<br>")
document.write(np)
</script>
Existe alguma maneira de manter o original e modificar a cópia?
Solução
Você nunca fez uma cópia da matriz. Você simplesmente atribuído a matriz para outra variável. Isso não copiar em Javascript. No seu exemplo só há uma matriz com duas variáveis ??pelo qual você pode acessá-lo. Não há como built-in maneira de copiar matrizes em Javascript, assim você terá que escrever sua própria função para fazê-lo.
Dê uma olhada este StackOverflow pergunta para uma dica sobre como aplicar na prática a cópia dos elementos na matriz.
Outras dicas
Alguns dos construído em funções de matriz vai realmente criar uma cópia para você. Um desses é fatia.
Por exemplo:
var op=new Array(0, 0);
var np= op.slice(0);
np[1]=2;
document.write(op+"<br>")
document.write(np)
O que você está fazendo não está criando uma cópia da matriz, é só criar uma cópia da referência para a matriz, de modo a obter duas referências para o mesmo objeto array.
Isto é como você pode criar uma cópia real do array:
var np = op.concat();
O método concat
cria uma nova matriz que é uma cópia do array com todos os itens adicionais adicionados. Se você não especificar quaisquer itens adicionais que você acabou de obter uma cópia da matriz.
Array.prototype.copy = function() {
return this.slice(0, this.length);
}
Em seguida,
var op=new Array(0, 0);
var np=op.copy();
np[1]=2;
document.write(op+"<br>")
document.write(np)
Você deve clonar a segunda matriz em vez de copiá-lo.
--- Atualização
Se você atribuir um objeto a uma variável, apenas a referência é copiada (o que significa, ambos apontam para a mesma data). Para ter uma cópia independente do objeto que você precisa para cloná-lo. E existem várias maneiras como esta, por exemplo aqui é a maneira de clonar objeto usando jQuery.
Você pode apenas usar o método slice
nativa que retorna uma cópia da matriz:
var np = op.slice(0,op.length);
O segundo parâmetro deve ser opcional, mas no IE Eu acredito que é necessário.
O seu código, com a mudança:
var op=new Array(0, 0);
var np=op.slice(0,op.length);
np[1]=2;
document.write(op+"<br>")
document.write(np)
Para criar uma nova matriz que você pode querer considerar:
var op = [];
Para copiar um array:
var np=op.slice();
ou
var np=op.concat();
concat é mais rápido, enquanto fatia ocupa menos um personagem. Algumas pessoas pseudônimo "fatia" ou "concat" como "cópia" de modo que é mais óbvio que você está fazendo uma cópia.
Não há necessidade de parâmetros em ambos os casos. Parâmetros na fatia fará apenas o código maior e mais lento.