javascript 如何通过模式获取对象键?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6754990/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to do I get object keys by a pattern?
提问by ajsie
I have an object with named keys:
我有一个带有命名键的对象:
var names = {
"Peter Pan": {...},
"Peter Parker": {...},
"Tony Stark": {...},
...
}
Is there a way to get all keys by a pattern eg. all keys having Peter in it?
有没有办法通过模式获取所有键,例如。所有钥匙里都有彼得?
The case is that I want to have all the filtered keys in an array eg:
情况是我想在一个数组中包含所有过滤的键,例如:
var filteredNames: [
"Peter Pan",
"Peter Parker",
...
]
回答by Lepidosteus
You can easily do it by looping over the keys yourself:
您可以通过自己循环键轻松完成:
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
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/)
回答by Gabriel
var filteredNames = Object.keys(names).filter((name) => /Peter/.test(name));
回答by user113716
If you want it case sensitive:
如果您希望区分大小写:
var filteredNames = [];
for( name in names ) {
if( name.indexOf( "Peter" ) > -1 ) {
filteredNames.push( name );
}
}
If not:
如果不:
var filteredNames = [];
for( name in names ) {
if( /peter/gi.test( name ) ) {
filteredNames.push( name );
}
}
回答by supakeen
You could extend the JavaScript Array prototype, like so:
您可以扩展 JavaScript 数组原型,如下所示:
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;
}
}
Now I haven't actually tested this code but this would give all arrays you create in JavaScript a method .regex_search which takes an argument 'pattern'. This will either return false when no matches are found or an array of indices when elements match.
现在我还没有真正测试过这段代码,但这会给你在 JavaScript 中创建的所有数组提供一个方法 .regex_search,它接受一个参数“模式”。这将在找不到匹配项时返回 false 或在元素匹配时返回索引数组。
You could then iterate over this array and take those indices from the original array.
然后您可以迭代这个数组并从原始数组中获取这些索引。