假设您不在函数中,所有这些都是完全相同的:
var myVar = 7;
window.myVar = 7;
window["myVar"] = 7;
因此,您可以使用 window[ insertString ] 方法访问任何全局变量(在函数外部定义的变量)。如果您想搜索 window 对象上的每个属性以找到一个名为 example,您可以这样做:
for( var k in window ){
if(/example/.test(k)){
var myExample = window[k];
// Do stuff
}
}
不过,出于多种原因,我强烈建议不要使用这种方法。首先,将任何东西放在全局范围内是一种非常糟糕的做法。变量将开始在大型项目中到处发生冲突。此外,window 对象有很多属性,搜索所有这些属性是一个可怕的性能消耗。
说了这么多,我已经设计了一个你应该做什么的例子,包括帮助函数:
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);
filter 函数返回一个包含所有匹配对象的数组。
- - 编辑 - -
您希望它说出控制台中对象的名称。我假设您的意思是控制台当前显示 [object, object, object, object]。有两种方法可以做到这一点:
(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);