Tengo algunos datos json:
var data = { "version": "2.0", "result": { "0": [418789, 418790, 418791], "1": [431961, 431962, 431963], } };Y tengo el valor x que estoy buscando, que en este caso x = 431962 Entonces, para hacer esto, he escrito una función de búsqueda que se proporciona a continuación:
for (var i = 0; i < Object.keys(data.result).length; i++) { for (var p = 0; p < Object.values(data.result)[i].length; p++) { if (Object.values(data.result)[i][p] == 418789) { console.log(Object.keys(data.result)[i]) } } }Sin embargo, mi problema es que esta función de búsqueda consta de 2 bucles for que están anidados, por lo que la velocidad es increíblemente lenta cuando se busca en una gran cantidad de datos JSON. Sin embargo, parece que no puedo encontrar una solución sobre cómo mejorar la eficiencia y la velocidad aquí. .
Esta búsqueda está tratando de encontrar en qué clave existe el valor x, donde los nombres de las claves en realidad son nombres aleatorios sin un orden específico, y los datos JSON tienen un par de miles de claves con cada matriz que contiene alrededor de 50 valores de 1 a 1,000,000
Una mejora que puede hacer es almacenar referencias al objeto/matriz específico con el que está trabajando para que no tenga que volver a Object.keys(...) una y otra vez.
let data = { "version": "2.0", "result": { "0": [418789, 418790, 418791], "1": [431961, 431962, 431963], } }; function findWhichArrayContainsValue(val) { for (key in data.result) { const candidateArray = data.result[key]; if (candidateArray.includes(val)) { return candidateArray; } } return undefined; } console.log(findWhichArrayContainsValue(418789)); console.log(findWhichArrayContainsValue(898989));