Как я могу получить ключи объектов по шаблону?
У меня есть объект с именованными ключами:
var names = {
"Peter Pan": {...},
"Peter Parker": {...},
"Tony Stark": {...},
...
}
Есть ли способ получить все ключи по шаблону, например. все ключи, в которых есть Питер?
Дело в том, что я хочу иметь все отфильтрованные ключи в массиве, например:
var filteredNames: [
"Peter Pan",
"Peter Parker",
...
]
Ответы
Ответ 1
Вы можете легко сделать это, перейдя по клавишам самостоятельно:
var filtered_keys = function(obj, filter) {
var key, keys = [];
for (key in obj) {
if (obj.hasOwnProperty(key) && filter.test(key)) {
keys.push(key);
}
}
return keys;
}
// example:
var filteredNames = filtered_keys(names, /Peter/); // second parameter is a javascript regex object, so for exemple for case insensitive you would do /Peter/i
ES6
let filtered_keys = (obj, filter) => {
let key, keys = []
for (key in obj)
if (obj.hasOwnProperty(key) && filter.test(key))
keys.push(key)
return keys
}
// example:
let filteredNames = filtered_keys(names, /Peter/)
Ответ 2
var filteredNames = Object.keys(names).filter((name) => /Peter/.test(name));
Ответ 3
Если вы хотите, чтобы он учитывал регистр:
var filteredNames = [];
for( name in names ) {
if( name.indexOf( "Peter" ) > -1 ) {
filteredNames.push( name );
}
}
Если не:
var filteredNames = [];
for( name in names ) {
if( /peter/gi.test( name ) ) {
filteredNames.push( name );
}
}
Ответ 4
Вы можете расширить прототип JavaScript Array, например:
Array.prototype.regex_search = function(pattern) {
var returns = [];
for(var i = 0; i < this.length; i++) {
if(this[i].match(pattern) {
returns.push(i);
}
}
if(returns.length) {
return returns;
} else {
return false;
}
}
Теперь я на самом деле не протестировал этот код, но это даст все массивы, которые вы создаете в JavaScript, метод.regex_search, который принимает аргумент "pattern". Это либо вернет false, если совпадения не найдены, либо массив индексов, когда элементы соответствуют.
Затем вы можете перебрать этот массив и взять эти индексы из исходного массива.
Ответ 5
ECMAscript 5.1 предоставляет Object.keys()
для возврата имен свойств объекта.
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']
Источник.
Стандарт.