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]
]
}
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP