我有一个具有命名键的对象:
var names = {
"Peter Pan": {...},
"Peter Parker": {...},
"Tony Stark": {...},
...
}
有没有一种方法可以通过模式获取所有键,例如所有包含Peter的键?
我的情况是我想在一个数组中拥有所有过滤出来的键,例如:
var filteredNames: [
"Peter Pan",
"Peter Parker",
...
]
我有一个具有命名键的对象:
var names = {
"Peter Pan": {...},
"Peter Parker": {...},
"Tony Stark": {...},
...
}
有没有一种方法可以通过模式获取所有键,例如所有包含Peter的键?
我的情况是我想在一个数组中拥有所有过滤出来的键,例如:
var filteredNames: [
"Peter Pan",
"Peter Parker",
...
]
var filteredNames = Object.keys(names).filter((name) => /Peter/.test(name));
您可以通过自己循环键来轻松完成:
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/)
filter.test(key)
),而match返回一个数组,它将被类型转换为布尔值。 - RobGvar 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 );
}
}
Object.prototype
,否则它只是一个对象字面量,因此在链上不会有任何可枚举的属性,如果你扩展了Object.prototype
,那么你的代码应该会出问题,这样你就可以纠正这个缺陷。 - user113716Array.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,否则将返回一个索引数组。
然后,您可以遍历此数组并从原始数组中取出这些索引。
forEach
和filter
。 - user113716