TransWikia.com

Buscar en un dentro de un objeto de arreglos en javascript

Stack Overflow en español Asked by Sant383 on September 15, 2020

Por favor tengo un objeto de arreglos y necesito buscar dentro de él para obtener los valores que corresponde para realizar un cálculo.

user input = "MON32";

     var opt = {
            cat1: [
                ["MON32", 23, 12, 0.5, 5, 39.87],
                ["MON41", 18, 12, 0.5, 5, 73.11]
            ],
            cat2: [
                ["PAR", 28, 12, 0.5, 15, 0],
                ["FIL", 24, 1, 0.5, 15, 0],
                ["REJ", 27, 9, 0.8, 15, 0],
                ["RET", 29, 14, 0.7, 15, 0] 
            ]
        }

2 Answers

Ya existe una respuesta, pero de todas maneras pongo la mía:

let palabraBuscar = "MON32";

for(const property in opt){
    var arraysInternos = opt[property];
    for(const element of arraysInternos){
        if(element[0] == palabraBuscar)
            console.log(element.slice(1));
    }
}

Inicialmente tienes un objeto, por el cual debes usar for...in. Te aconsejo leer la documentación sobre cómo funciona aquí. Al utilizar dicha declaración puedes acceder a cada una de las propiedades de tu objeto, en tu caso:

for(const property in opt) // property tomará los valores de cat1, cat2

Debido a eso, puedes acceder, en la siguiente línea, al array interno que tiene cada propiedad. Aquí:

var arraysInternos = opt[property]; // Retornará los arrays internos
// cat1 => retornará 2 arrays
// cat2 => retornará 4 arrays

Dado que ahora tienes arrays, puedes utilizar for...of

for(var element of arraysInternos) // element tomará ["MON32",...,39.87],["MON41", ...], etc.

Finalmente, dado que element es un array unidimensional, simplemente accedes al primer elemento para comparar con la palabra que buscas.

Si la encuentra, retornas el resto del array con slice(), dicho método toma una porción de tu array dependiendo del índice de inicio o fin que le pongas. En este caso:

element.slice(1); //Retorna el array desde el índice 1 [0, 1, 2, 3, 4, 5]
                  //                                    x,[o, o, o, o, o]

slice() recibe dos parámetros, inicio y fin, pero cuando no le indicas el parámetro de fin, por defecto toma el tamaño del array, es decir, hasta el final del array.

var opt = {
            cat1: [
                ["MON32", 23, 12, 0.5, 5, 39.87],
                ["MON41", 18, 12, 0.5, 5, 73.11]
            ],
            cat2: [
                ["PAR", 28, 12, 0.5, 15, 0],
                ["FIL", 24, 1, 0.5, 15, 0],
                ["REJ", 27, 9, 0.8, 15, 0],
                ["RET", 29, 14, 0.7, 15, 0] 
            ]
        }
        
let palabraBuscar = "MON32";

for(const property in opt){
    var arraysInternos = opt[property];
    for(const element of arraysInternos){
        if(element[0] == palabraBuscar )
            console.log(element.slice(1));
    }
}

Correct answer by L. Flor on September 15, 2020

let userInput = "MON32";

let opt = {
    cat1: [
        ["MON32", 23, 12, 0.5, 5, 39.87],
        ["MON41", 18, 12, 0.5, 5, 73.11],
    ],
    cat2: [
        ["PAR", 28, 12, 0.5, 15, 0],
        ["FIL", 24, 1, 0.5, 15, 0],
        ["REJ", 27, 9, 0.8, 15, 0],
        ["RET", 29, 14, 0.7, 15, 0],
    ],
};

let resultado = []
Object.keys(opt).forEach(key => {
    const exists = opt[key].filter(arr => arr[0] === userInput)[0];
    if(exists){
        resultado = exists.slice(1)
    }
})

console.log(resultado)

Answered by awamas on September 15, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP