Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao buscar por uma solução eficiente para encontrar todas as posições de um caractere em uma string, muitos desenvolvedores recorrem a loops tradicionais. No entanto, o método mais direto e performático pode variar dependendo do ambiente de execução e do tamanho dos dados.
O problema concreto aqui é determinar uma estratégia que seja ao mesmo tempo rápida, clara e de fácil manutenção. Uma abordagem comum é percorrer toda a string verificando cada caractere, uma operação linear com complexidade O(n). Apesar de parecer simples, há dúvidas se essa abordagem é suficiente frente a diferentes tamanhos de strings ou requisitos de desempenho.
Além do mais, é importante compreender que a indexação em JavaScript começa em zero, o que pode gerar confusões na hora de exibir posições para quem trabalha com índices humanos, que geralmente começam em 1. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Vamos explorar duas abordagens possíveis, com foco na eficiência e na clareza.
const findIndices = (str, char) => {
const indices = []. for (let i = 0. i < str.length. i++) {
if (str[i] === char) {
indices.push(i + 1). // ajusta para índice humano
}
}
return indices. } Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
// Exemplo de uso
const resultado = findIndices('scissors', 's'). console.log(resultado). // [1, 4, 5, 8]
Este método é direto, fácil de entender e performático na maioria dos contextos. A vantagem é a simplicidade e o controle total sobre o fluxo. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Outra estratégia é usar métodos como split, map e filter, embora esses possam parecer mais elegantes, podem comprometer a performance dependendo do tamanho da string. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
const findIndicesNative = (str, char) => {
return str.split('').map((c, i) => c === char ? i + 1 : null).filter(i => i !== null). } O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
// Teste
console.log(findIndicesNative('scissors', 's')). // [1, 4, 5, 8] Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Apesar de mais compacto, esse método cria arrays intermediários, o que pode impactar a performance em operações com muitas chamadas. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Na prática, a diferença de desempenho entre esses métodos só se torna relevante com strings de tamanhos muito grandes ou em loops de alta frequência de execução. Para a maioria dos casos de uso, a abordagem do loop tradicional oferece o melhor equilíbrio entre clareza e performance. A decisão fica mais saudável quando o time consegue medir o impacto depois. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Por outro lado, o uso de funções nativas pode facilitar a leitura do código, mas deve ser avaliado em cenários onde o desempenho é um fator crítico. Sempre valide a escolha com testes de carga específicos ao seu projeto. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Com essas estratégias, você consegue manter seu código eficiente sem abrir mão da legibilidade. Mantendo o foco na operação de busca, é possível ajustar a abordagem de acordo com o contexto de uso, sempre balanceando desempenho e clareza. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Carregando comentários...