Antes da introdução, faça uma pergunta: como combinar várias matrizes em uma matriz?
As seguintes sessões de compartilhamento são divididas nas seguintes subseções:
1. Introdução básica ao método concat
2. Sinta o método concat do exemplo
1. Introdução básica ao método concat
O método Concat é usado para mesclar várias matrizes. Ele adiciona o membro da nova matriz ao final da matriz original e, em seguida, retorna uma nova matriz, a matriz original permanece inalterada.
console.log ([]. Concat ([1], [2], [3])); // [1, 2, 3] console.log ([]. Concat ([[1], [2], [3]])); // [1], [2], [3]] console.log ([]. Concat (4, [[5,6], [7]])); // [4, [5, 6], [7]]
No código acima, o primeiro valor de retorno é mesclar uma matriz vazia com três matrizes [1], [2], [3] em uma matriz, retornando assim [1, 2, 3]. O segundo é combinar uma matriz vazia com um número bidimensional. Os membros da matriz bidimensional são [1], [2], [3], então [[1], [2], [3]] são retornados. Observe que a matriz bidimensional retornada. O terceiro exemplo é o mesmo. O entendimento dos conceitos é muito importante aqui, ou seja, adicionar membros da nova matriz à cauda da matriz original.
Além de aceitar as matrizes como parâmetros, a Concat também pode aceitar outros tipos de valores como parâmetros. Eles serão usados como novos elementos, adicionando o final da matriz.
console.log ([]. Concat (1,2,3)); // [1,2,3]; // equivalente ao console.log ([]. Concat (1, [2,3])); // [1,2,3]; console.log ([]. Concat ([1], [2,3])); // [1,2,3];
Embora haja menos conteúdo aqui, parece bastante simples. Mas realmente não é fácil de entender.
2. Sinta o método concat do exemplo
Depois de falar sobre o conhecimento básico, deixe -me mostrar uma pergunta que encontrei recentemente. O título original é assim.
Você pode ver o que isso significa olhando para os exemplos.
Uma das soluções para esta pergunta é:
var flatten = function (arr) {return [] .concat.apply ([], arr);};Essa função simples pode realizar a função de mesclar elementos em uma matriz. Mas quando eu entendo esse valor de retorno, surge um problema.
Pergunta: Por que existe uma diferença entre usar o método Aplicar e não usar o método Aplicar?
console.log ([]. concat.apply ([], [[1], [2], [3]])); // [1, 2, 3] console.log ([]. Concat ([[1], [2], [3]])); // [[1], [2], [3]]
No código acima, uma nova matriz também é adicionada à cauda em uma matriz vazia e a primeira retorna [1,2,3]. O segundo é uma matriz bidimensional.
Após um período de lançamento e perseguição, finalmente entendi as diferentes razões.
Primeiro, quando chamamos o método de instância concat em uma matriz vazia, passamos os parâmetros em concat e empurramos até o final da matriz. Ou seja, a matriz vazia é fundida com a matriz mais externa da matriz passada e, em seguida, uma nova matriz é devolvida.
console.log ([]. Concat (1,2,3)); // [1, 2, 3] console.log ([]. Concat ([1], [2], [3])); // [1, 2, 3] console.log ([]. Concat ([[1], [2], [3]])); // [1], [2], [3]] console.log ([]. Concat ([[1], [2], [3]])); // [[1], [2], [3]]]
No código acima, ele muda gradualmente de várias matrizes para matrizes unidimensionais, matrizes bidimensionais e matrizes tridimensionais.
No artigo detalhado de explicação e resumo dos métodos de chamada, aplicação e ligação em JavaScript, é mencionado que a função do método de aplicação é semelhante ao método de chamada e também muda esse ponto (o escopo em que a função é executada) e depois chama a função no escopo especificado. A função também será executada imediatamente. A única diferença é que ele recebe uma matriz como um argumento quando a função é executada.
O primeiro parâmetro do método Aplicar também é o objeto que isso deseja apontar. Se definido como nulo ou indefinido ou isso, é equivalente a especificar um objeto global. O segundo parâmetro é uma matriz e todos os membros da matriz são usados como parâmetros por sua vez, e a função original é transmitida quando chamada. Os parâmetros da função original devem ser adicionados um por um no método de chamada, mas no método Apply, eles devem ser adicionados como uma matriz.
console.log ([]. concat.apply ([], [[1], [2], [3]])); // [1, 2, 3] console.log ([]. Concat ([[1], [2], [3]])); // [[1], [2], [3]]
Como pode ser visto no código, a primeira parte do código chama o método Concat primeiro na matriz vazia. A função deste método é adicionar membros da nova matriz ao final da matriz original. O método de aplicação é chamado novamente e o primeiro parâmetro é passado, especificando o escopo do objeto que está sendo executado. A função do segundo parâmetro é passar todos os membros da matriz como parâmetros ao mesmo tempo e passá -los para a matriz quando chamados.
Portanto, quando os métodos Concat e Apply são usados ao mesmo tempo, as funções dos dois métodos serão sobrepostas, que é um fenômeno diferente do que o uso sozinho concat. Vamos ver um exemplo.
console.log ([]. Concat ([1,2,3])); // [1, 2, 3] console.log ([]. Concat.apply ([], [[1], [2], [3]])); // [1, 2, 3] console.log ([]. Concat ([[1], [2], [3]])); // [1], [2, [3]] console.log ([]. Concat ([[1], [2], [3]])); // [[1], [2], [3]] console.log ([]. Concat ([[1], [2], [3]])); // [[1], [2], [3]] console.log ([]. Concat ([[1], [2], [3]]])); // [[1], [2], [3]] console.log ([]. Concat ([[1], [2], [2], [3]]] console.log ([]. Concat.apply ([[]], [[1], [2], [3]]]); [3]]
No código acima, o método Concat combina mais números e, em seguida, mescla a próxima matriz de camada com base na mesclagem.
console.log ([]. concat.apply ([], [[1], [2], [3]])); // [1, 2, 3] // equivalente ao console.log ([]. Concat (1,2,3)); // [1,2,3]
Resumir:
1. Ao usar o método Concat sozinho, os membros da nova matriz serão adicionados ao final da matriz original.
2. Ao usar o método Aplicar para especificar este ponteiro do método Concat, as funções dos dois métodos serão sobrepostas.
3. Métodos para mesclar elementos de matriz:
var flatten = function (arr) {return [] .concat.apply ([], arr);}; var flatten = function (array) {return Array.Reduce (function (a, b) {return A.Concat (b);}, [])}O acima é o método de mesclar matrizes usando o método Concat introduzido pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!