如何调用以相同字母开头的多个变量,如何调用包含特定值的所有变量?

时间:2013-01-23 05:27:42

标签: javascript jquery variables

我需要以下两个代码
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”的变量的所有名称

任何帮助表示赞赏!

3 个答案:

答案 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(数组),找到“真实”作为“可用”值的可用物品