我需要以下两个代码
1)用于选择以“示例”开头的所有变量的代码
2)用于选择具有“true”作为“available”
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}
这是我想用代码1实现的。由于存在很多变量,我需要一种快速的方法:
var allexampleprices=[example1.price, example2.price, example3.price, example4.price]
使用第二个代码我想得到一个数组,其中包含包含值“false”的变量的所有名称
任何帮助表示赞赏!
答案 0 :(得分:1)
所有这些都完全相同,假设你不在函数中:
var myVar = 7;
window.myVar = 7;
window["myVar"] = 7;
因此,您可以使用窗口[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);
filter函数返回所有匹配对象的数组。
---编辑---
您希望它在控制台中说出对象的名称。我假设你的意思是控制台当前显示[对象,对象,对象,对象]。有两种方法可以做到这一点:
(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);
答案 1 :(得分:0)
如果所有变量都在全局范围内
,我确实如下 var passedElements = [];
for(var i = 1, l = 100 /* Maximum number of variable */ ; i < l; i++){
if(window['example' + i]){
var temp = window['example' + i];
if(temp.available === true){
passedElements.push(temp);
}
}/*
else{
// Dont break the loop here, if any variable is missing in between
two variables it will fail. Eg : Example1, Example3.. 2 is missing.
}*/
}
console.log(passedElements);
我希望它会有所帮助。
答案 2 :(得分:0)
似乎下面的行是由一些逻辑代码生成的: var example1 = {price:1000,size:1000,available:true}
为什么不简单地将可变名称存储在另一个应该为您提供Q-1解决方案的数组中。
然后你可以轻松遍历所有的vaiables(数组),找到“真实”作为“可用”值的可用物品