Рассмотрим объект:
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);
В дополнение к предыдущим ответам, если вам нужно выполнять такую операцию часто и целевой объект также меняется, вы можете написать следующую функцию утилиты:
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));
От
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'))
Согласно вашим требованиям, это, вероятно, то, что вам нужно:
const firstMatchedKeyNameInObject = Object.keys(myObj).find(keyName => keyName.includes('prettyKey'));
Хорошо, поэтому нашел возможный ответ почти сразу после публикации:
Object.keys(myObj).findIndex(x=>x.match(/PrettyKey/i))
Просто нужно использовать поиск по индексу на основе =>
на клавишах.
Интересно, есть ли более быстрый способ сделать это через lodash.