Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JRRC

Problema ao referenciar array

Recommended Posts

Olá a todos, boa tarde.

Pessoal estou tentando criar um Map (Map<k,v> em java) em javascript, onde as chaves e os valores são adicionados dinamicamente, no entanto, quando tento "cria-los" de maneira dinâmica sempre acaba dando erro.

 

Tento criá-los a partir do seguinte código.

 

var key;
var value;
$(".conteudoMenu a").click(function(){
    // Obtenhos os valores das Keys
    key = $(this).parent(".conteudoMenu").parent("li").find(".itemMenu").attr("id");
   // Obtenho os valores do Values
    value = $(this).attr("id"); 
 
    // Método que chamo para adicionar as keys e os values
    Processar({ key : [value] });
});
 
var Processar = function(mapaDeListas) {
  // mapaDeListas[key] -> Cria o array com o nome da Key se ele ainda não existir
  // Verifica se já existe chave vinda do "key" e se o valor de "value" está presente no array
  if (mapaDeListas[key] && $.inArray(value, mapaDeListas[key]) == -1) {  
     // Caso o array com o nome da key já exista e o valeu não, então, ele adicionar o value a sua respectiva key 
     mapaDeListas[key].push(value);
    }
    else {
        // Caso a condição acima seja false, então, cria-se o array de acordo com o valor da "key" e adiciona o valor de "value"
        mapaDeListas[key] = [value];
    }
}
No entanto, da maneira que meu codigo estar, mesmo que eu adicione dois valores pertencente a mesma Key, ele sempre cai no else além de sobrescrever os valores que já existem.
E caso eu adicione um Key nova em vez de ser criado um novo array o que acontece é que este novo sobrescreve o anterior.
Alguém sabe me dizer o que devo fazer para corrigir o meu código?
Desde de já obrigado pela ajuda de todos.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu nao gosto de jquery, eu utilizaria os metodos nativos do javascript

 

var key;
var value;
var mapaDeListas = new Array();
$(".conteudoMenu a").click(function(){
    // Obtenhos os valores das Keys
    key = $(this).parent(".conteudoMenu").parent("li").find(".itemMenu").attr("id");
   // Obtenho os valores do Values
    value = $(this).attr("id"); 
 
    // Método que chamo para adicionar as keys e os values
    Processar();
});
 
var Processar = function() {
  // mapaDeListas[key] -> Cria o array com o nome da Key se ele ainda não existir
  // Verifica se já existe chave vinda do "key" e se o valor de "value" está presente no array
  if (mapaDeListas[key] && value in mapaDeListas[key] ) {  
     // Caso o array com o nome da key já exista e o valeu não, então, ele adicionar o value a sua respectiva key 
     mapaDeListas[key].push(value);
    }
    else {
        // Caso a condição acima seja false, então, cria-se o array de acordo com o valor da "key" e adiciona o valor de "value"
        mapaDeListas[key] = new Array();
        mapaDeListas[key].push(value);
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal, desculpem-me pela demora no feedback.

A solução que o paulojuchem funciona perfeitamente desde de que deixe o if anterior.

Ou seja, da seguinte maneira abaixo.

if (mapaDeListas[key] && $.inArray(value, mapaDeListas[key]) == -1) {

Obrigado pela ajuda de todos.

Muito obrigado mesmo

 

O código por inteiro ficou da seguinte maneira abaixo.

var key;
var value;
var mapaDeListas = new Array();
$(".conteudoMenu a").click(function(){
    key = $(this).parent(".conteudoMenu").parent("li").find(".itemMenu").attr("id");
    value = $(this).attr("id"); 
 
    Processar();
    console.log(mapaDeListas);
});
 
var Processar = function() {
    if (mapaDeListas[key] && $.inArray(value, mapaDeListas[key]) == -1) {
        // Verifica se já existe chave vinda do "key" e se o valor de "value" está presente no array
        mapaDeListas[key].push(value);
    }
    else {
        // Cria o array de acordo com o valor da "key" e adiciona o valor de "value"
        mapaDeListas[key] = new Array();
        mapaDeListas[key].push(value);
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.