Ir para conteúdo

Arquivado

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

diegohamaz1

Criando Array com objetos

Recommended Posts

Galera tudo bem??

 

 

Alguem me dá uma força nisso ? Preciso construir um array da seguinte forma tenho o seguinte script em JQUERY

 var arr_garantia = {};
 
$('.garantias').find('input,textarea,select').each(function(key,value){
 var id = $(this).attr('data-id');
 arr_garantia[id] = { value: $(this).val() };
});

Nesse looping pego os objetos que eu quero do documento, eu gostaria de montar um objeto (array) pra dar outro each pegando o data-id e value dos campos, lembrando que vai ter varias DIV (garantias)

 

Porem nao estou conseguindo , queria mais ou menos assim.

 

 

garantia1 { nome_input : valor_input} , garantia2 { nome_input: valor_input}

 

Para depois eu trabalhar com esse vetor, quem puder me ajudar agradeço !

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não definiu um array, definiu um json:

var arr_garantia = {};

O array pode ser isso:

var arr_garantia = [];

e isso:

var arr_garantia = new Array();


Por um momento, esqueça que exista jQuery e trabalhe com apenas com a linguagem javascript. Esquecer que existe a linguagem propriamente dita é ruim.

arr_garantia.push(elemento);

Isso adicionará um elemento ao final do array. Os índices dos arrays podem ser numéricos ou strings. Entretanto, algumas funções só trabalham com arrays numéricos, veja o exemplo:

var arr = [];
arr['teste'] = 'value';
arr.push('value 2');

Uso de forEach (ECMAScript 5.1):

arr.forEach(function(element, index, array) {
    console.log('array["' + index + '"] = ' + element);    
});

Saída:

array["0"] = value 2


Uso de for...in (ECMAScript 1st)

for(row in arr) {
    console.log('array["' + row + '"] = ' + arr[row]);    
}

Saída:

array["0"] = value 2
array["teste"] = value

 

 

Como pode ver, for...in trabalha também tanto com arrays indexados ou associativos, enquanto forEach apenas com indexado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu problema esta sendo o seguinte

 jsonObj = [];
$('.garantias').find('input,textarea,select').each(function(){           
                
                var campo = $(this).attr("id");
                var valor = $(this).val();
                item = {}
                item ["campo"] = campo;
                item ["valor"] = valor;
                jsonObj.push(item);             
});

Me gera um retorno assim

 

[Object { campo="cpGarantia", valor="2"}, Object { campo="garantiaTipoValor", valor="2"}, Object { campo="garantiaValor", valor="R$ 1,11"}, Object { campo="garantiaValorPercentual", valor=""}, Object { campo="cpGarantiaDescricao", valor=""}, Object { campo="cpGarantiaObservacao", valor="11"}, Object { campo="cpGarantia-2", valor="2"}, Object { campo="garantiaTipoValor-2", valor="2"}, Object { campo="garantiaValor-2", valor="R$ 111"}, Object { campo="garantiaValorPercentual-2", valor=""}, Object { campo="cpGarantiaDescricao-2", valor=""}, Object { campo="cpGarantiaObservacao-2", valor="11"}, Object { campo="ultimoValorGrupoGarantia", valor="2"}]

 

Porem eu queriar criar um indice para esse objetos para eu pode trabalhar com eles depois usando

 

for (var key in jsonObj) {
if (jsonObj.hasOwnProperty(key)) {

}

}

 

Tipo.... o campo cpGarantiaDescricao-2 pertence a garantia 2 para assim eu poder trabalhar melhor com eles..

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só não usar o push, olhe novamente os exemplos postados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso retorno de json normalmente dentro de um loop, no seu caso fica mais ou menos assim:


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

   console.log(ret[i].campo);

   console.log(ret[i].valor);                           
}

Lembrando que ret eh o retorno do php com o json_encode.

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é o seu resultado? Aqui funciona corretamente:

var arr = [];


var item = {}
item ["campo"] = 'campo';
item ["valor"] = 'valor';

arr['teste'] = item;

for (key in arr) {
    if(arr.hasOwnProperty(key)) {
        console.log(arr[key]);  
    }
}

Saída:

Object { campo="campo", valor="valor"}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Tente fazer assim:

 

// em cada container de garantia, você adiciona o
// atributo data-id_garantia="" para identificar os
// campos relacionados à ela; aí o objeto final vai ficar
// assim (obs: idGarantia é o id que você adiciona no data-id_garantia):
// {
//     idGarantia1:[{campo1:valor, campo2:valor, campo3:valor, etc}],
//     idGarantia2:[{campo1:valor, campo2:valor, campo3:valor, etc}],
//     idGarantia3:[{campo1:valor, campo2:valor, campo3:valor, etc}],
//     etc
// }
 
var dados = {};
$('.garantias').each(function(){
    var idGarantia = $(this).data("id_garantia");
    dados[idGarantia] = [];
    
    $(this).find('input,textarea,select').each(function(key,value){
        dados[idGarantia].push({
            campo : this.id,
            valor : this.value
        });
    });
});

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Tente fazer assim:

 

// em cada container de garantia, você adiciona o
// atributo data-id_garantia="" para identificar os
// campos relacionados à ela; aí o objeto final vai ficar
// assim (obs: idGarantia é o id que você adiciona no data-id_garantia):
// {
//     idGarantia1:[{campo1:valor, campo2:valor, campo3:valor, etc}],
//     idGarantia2:[{campo1:valor, campo2:valor, campo3:valor, etc}],
//     idGarantia3:[{campo1:valor, campo2:valor, campo3:valor, etc}],
//     etc
// }
 
var dados = {};
$('.garantias').each(function(){
    var idGarantia = $(this).data("id_garantia");
    dados[idGarantia] = [];
    
    $(this).find('input,textarea,select').each(function(key,value){
        dados[idGarantia].push({
            campo : this.id,
            valor : this.value
        });
    });
});

 

 

 

Cara perfeito !!!!!

 

 

resolvido , era isso mesmo !

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.