Найти по значению в объекте JavaScript - PullRequest
3 голосов
/ 30 октября 2019

Я борюсь с какой-то задачей в JavaScript. У меня есть следующий объект:

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*/)
        }
    }

}

Каждый объект имеет метод процессора. Я хочу вернуть обработчик объекта, который содержит идентификатор tmEM6RoEPmUO

Я могу перебрать ключи и проверить для каждого ключа, содержит ли он данный идентификатор, но это выглядит как обходной путь, есть либолее эффективный способ?

Ответы [ 3 ]

3 голосов
/ 30 октября 2019

Я бы просто перебрал ключи и проверил. В этом случае временная сложность будет O(N). Это будет похоже на

let res = Object.values(obj).find(x => x.id === 'tmEM6RoEPmUO').dataProcessor()

Но учтите, что вы хотите O(1) сложность времени, тогда вы можете создать другой объект с ключами, равными id объекта.

let newObj = Object.fromEntries(Object.entries(obj).map(([_, v]) => [v.id, v]));
let res = newObj['tmEM6RoEPmUO'].dataProcessor() 
0 голосов
/ 30 октября 2019

Вы можете вытянуть нужный объект в константу method и вызвать его метод dataProcessor с вашими аргументами, например так:

const method = Object.values(obj).find(o => o.id === 'tmEM6RoEPmUO');
method.dataProcessor(data);
0 голосов
/ 30 октября 2019

перебирает весь ключ в объекте и проверяет его идентификатор

for(let m of Object.keys(methods)){
 if(methods[m].id == "tmEM6RoEPmUO"){
  return methods[m].dataProcessor;
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...