String Cartography pt-br Explainer

Explicação de Cartografia de strings

Objetivo do desafio: Escreva uma função que pega uma string e retorna um objeto que tem cada caractere da string como uma propriedade, com cada propriedade contendo uma array de índices onde o caractere aparece.
Passo a passo da solução:
A função que você escreve neste desafio pegará uma string e retornará um objeto que mostra quais caracteres estão na string e todos os índices em que esses caracteres aparecem. Por exemplo, vamos chamar a função na string 'bookkeeper':

mapString('bookkeeper');

Isso retornará um objeto assim:

{
  b: [0],
  o: [1, 2],
  k: [3, 4],
  e: [5, 6, 8],
  p: [7],
  r: [9]
}

O objeto tem uma propriedade separada para cada caractere da string. Dentro de cada propriedade há uma array que contém as posições do índice onde os caracteres aparecem.

Comece a escrever a função, criando um objeto vazio dentro da função. Por exemplo:

let map = {};

Em seguida, acrescente um laço for clássico para fazer a iteração pela string.

for (let i = 0; i < string.length; i++) {

}

Dentro do laço for, crie outra variável local para armazenar o caractere atual. Por exemplo:

let letter = string[i];

Em seguida, use uma if…else statement (também pode ser usado um ternário) para verificar se uma propriedade já existe no map para a letra atual. Se a propriedade não existir, ela será indefinida, o que é falsy*. A if…else statement será assim:

if (map[letter]) {

} else {

}

Se a propriedade já existe (o que significa que o caractere atual já foi visto antes), então insira o índice do caractere atual para a array contida na propriedade. Se não existir, crie a array (com o índice dentro como 1º item). Deve ficar assim:

if (map[letter]) {
  map[letter].push(i);
} else {
  map[letter] = [i];
}

Por último, ao final da função, retornar map.
Conceitos de JavaScript: Funções, Objetos, Propriedades, Strings, Laço for, If Statements, Veracidade
Código Adicional (código oculto executado antes do código do desafio):

defineModule(
    'grasshopper.wordList',
    {
        word: pickRandom(['boo', 'banana', 'bookkeeper', 'code'])
    }
);

Estou com um problema de sintaxe que é idiota, mas não consigo resolver.
Não consigo colocar colchetes para carregar a variável como vazia: variável = {}

Obg

4 Likes

Estou com o mesmo problema

5 Likes

Olá Francisco.

Já apaguei, alterei e revisei a programação várias vezes, mas sempre ocorre o mesmo erro que não me deixa prosseguir.

2 Likes

As chaves da variável local let estão abrindo duas propostas {:} está errado… Usei function Map (. ) {__} deu certo mas n passou para próxima.

Já apaguei, alterei e revisei a programação várias vezes, mas sempre ocorre o mesmo erro que não me deixa prosseguir.

1 Like

Usei a função como variável let e deu super certo…eles deveriam aceitar como certo

Eu mereço um prêmio por isso…

Estou em uma situação parecida com a dos amigos. Quando coloco a sintaxe de atribuição do array ao objeto na seguinte linha

map[letter] = [
i,
___
];

Ela fica sessa forma, ele não reconhece e simplesmente não é possível passar desse ponto. Na verdade queria apenas colcar map[letter] = [i]. Quando tendo usar o [] de indexação em objetos também não funciona.

1 Like

Eu tenho a solução pro seu problema, você tem que chamar map[letter] = [i] como uma array não como uma propriedade de um array, não sei se entende dessa forma.
OBS: no meu caso a variavel que criei foi teste, a sua é letter
image

2 Likes

Mto bom parabéns, merece um prêmio

[Luanderson_Almeida] manda o código ai

Estou me sentido um idiota… tbm não consigo atribuir {}

1 Like

Obrigado… funcionou mesmo

1 Like

Eu consegui resolver os problemas relacionados a sintaxe, principalmente as de “[]” utilizando os colchetes q estão na cor rosa e não os na cor laranja

3 Likes

Olá,
Alguém podeira, por favor, mostrar onde está o erro no meu código.
Já apaguei e reescrevi, mas não está passando.
mapString

2 Likes

Alguem aí poderia me ajudar? Não consigo passar essa fase.

Olá, Felipe.
Vc juntou duas linhas aí no if(map[letter].push(i))

Tente assim:
if (map[letter]) {
map[letter].push(i);

Primeiro vc faz o teste, só depois é que deve atribuir o valor de i

1 Like

Cara muito obrigado! Eu finalmente consegui passar dessa questão. Eu tinha errado nas linhas mesmo.
image

Assim deu certo pessoal.