あなたが関数にいないと仮定すると、これらはすべてまったく同じものです。
var myVar = 7;
window.myVar = 7;
window["myVar"] = 7;
したがって、window [insertString]メソッドを使用して、任意のグローバル変数(関数の外部で定義された変数)にアクセスできます。ウィンドウオブジェクトのすべてのプロパティを検索して、exampleという名前のプロパティを見つけたい場合は、次のようにします。
for( var k in window ){
if(/example/.test(k)){
var myExample = window[k];
// Do stuff
}
}
ただし、多くの理由から、この方法を強くお勧めします。まず、グローバルスコープに何かを入れるのはひどく悪い習慣です。変数は、大きなプロジェクトの至る所で衝突し始めます。また、ウィンドウオブジェクトには非常に多くのプロパティがあり、それらすべてを検索するとパフォーマンスが大幅に低下します。
以上のことをすべて述べた上で、ヘルパー関数を含めて、実行する必要があることの例を考案しました。
var objects =
{
example1:
{
price: 1000,
size: 1000,
available: true
},
example2:
{
price: 2000,
size: 2000,
available: false
},
example3:
{
price: 3000,
size: 3000,
available: true
},
example4:
{
price: 4000,
size: 4000,
available: true
}
}
function filter(obj, comparator){
var list = [];
for(var k in obj){
if(obj.hasOwnProperty(k)){ // fix for IE
if(comparator(obj[k], k, obj)) list.push(obj[k]);
}
}
return list;
}
function isExample(obj, key){
if(/^example/.test( key.toLowerCase() )) return true;
}
function isAvailable(obj){
if(obj.available) return true;
}
/**
* And here's how you use it
*/
var examples = filter(objects, isExample);
var available = filter(objects, isAvailable);
var availableExample = filter(examples, isAvailable);
フィルタ関数は、一致するすべてのオブジェクトの配列を返します。
- - 編集 - -
コンソール内のオブジェクトの名前を言う必要があります。私はあなたが意味しているのは、コンソールが現在[オブジェクト、オブジェクト、オブジェクト、オブジェクト]を表示しているということだと思います。これを行うには2つの方法があります。
(1)オブジェクト自体に名前を入れます
example1:
{
name: "example1",
price: 1000,
size: 1000,
available: true
}
(2)フィルター操作で名前をキャプチャします
var names = [];
var examples = filter(objects, function(obj, name){
if(/^example/.test( name.toLowerCase() )){
names.push(name);
return true;
}
});
console.log(names);