javascript: самый короткий код для поиска ключа объекта, соответствующего шаблону

1

Рассмотрим объект:

var myObj = {
  hugeKey1: 'xxx',
  hugeKey2: 'xxx',
  hugeKey3: 'xxx',
  hugeKey4: 'xxx',
  prettyKey1: 'Only one'
};

Ниже приведен код для получения списка всех ключей с шаблоном hugeKey:

var filteredKeySet = _.filter(
    Object.keys(data),
    function (key) {
        if (key.match(/hugeKey/i)) {
            return true;
        }
    }
);

Существует только один ключ PrettyKey1, но это число в конце динамическое - это может быть PrettyKey2.

Какой самый короткий фрагмент кода для поиска первого ключа с совпадением шаблонов?

Что-то похожее на Object.keys(myObj).findFirstMatch(/PrettyKey/i);

Теги:

4 ответа

1
Лучший ответ

В дополнение к предыдущим ответам, если вам нужно выполнять такую операцию часто и целевой объект также меняется, вы можете написать следующую функцию утилиты:

function matchBy(pattern) {
    return obj => Object.keys(obj).find(k => k.match(pattern));
}

или же

function findBy(pattern) {
    return obj => Object.keys(obj).find(k => k.includes(pattern));
}

И затем используйте их как:

var match = matchBy(/prettyKey/i);
var find = findBy("prettyKey");

....
console.log(match(myObj));
console.log(find(myObj));
1

От

function callback(elm){
    if(elm.match(/prettyKey/i)) return true;
}
Object.keys(myObj).findIndex(callback);

в

Object.keys(myObj).findIndex(key=>key.match(/PrettyKey/i))

или же

Object.keys(myObj).findIndex(key=>key.includes('prettyKey'))
1

Согласно вашим требованиям, это, вероятно, то, что вам нужно:

const firstMatchedKeyNameInObject = Object.keys(myObj).find(keyName => keyName.includes('prettyKey'));
  • 0
    Спасибо - Требуется соответствие имени ключа
  • 0
    Рад слышать, что это сработало. Я исправлю свой ответ так, чтобы он не включал PS, поскольку это было только для уточнения ваших намерений.
0

Хорошо, поэтому нашел возможный ответ почти сразу после публикации:

Object.keys(myObj).findIndex(x=>x.match(/PrettyKey/i))

Просто нужно использовать поиск по индексу на основе => на клавишах.

Интересно, есть ли более быстрый способ сделать это через lodash.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню