Estoy luchando con alguna tarea en javascript. Tengo el siguiente objeto:
const methods = {
searchRanking: {
id: 'tmEM6RoEPmUO',
template: 'main_template',
startUrl: 'https://www.amazon.de/s?k={value}',
startValueOverrideName: 'url',
dataProcessor: function (data) {
return data.map(/*doe shit met data*/)
}
},
productDetails: {
id: 'tAewRCbTuuL5',
template: 'main_template',
startUrl: 'https://www.amazon.de/dp/{value}',
startValName: 'url',
dataProcessor: function (data) {
return data.map(/*doe shit met data*/)
}
}
}
Cada objeto tiene un método de procesador. Quiero devolver el procesador del objeto que contiene la identificación tmEM6RoEPmUO
Puedo recorrer las teclas y verificar cada clave si contiene la ID dada, pero parece una solución, ¿hay alguna manera más eficiente?
3 respuestas
Simplemente recorrería las teclas y comprobaría. En ese caso, la complejidad del tiempo será O(N)
. Será como
let res = Object.values(obj).find(x => x.id === 'tmEM6RoEPmUO').dataProcessor()
Pero considere que desea una complejidad de tiempo O(1)
, entonces puede crear otro objeto con claves iguales a la id del objeto.
let newObj = Object.fromEntries(Object.entries(obj).map(([_, v]) => [v.id, v]));
let res = newObj['tmEM6RoEPmUO'].dataProcessor()
Puede extraer el objeto deseado en una constante, method
e invocar su método dataProcessor
con sus argumentos de la siguiente manera:
const method = Object.values(obj).find(o => o.id === 'tmEM6RoEPmUO');
method.dataProcessor(data);
Recorrer todas las claves en el objeto y verificar su id
for(let m of Object.keys(methods)){
if(methods[m].id == "tmEM6RoEPmUO"){
return methods[m].dataProcessor;
}
}
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.