【问题标题】:query to an array javascript查询数组 javascript
【发布时间】:2013-01-27 16:42:27
【问题描述】:

如何查询数组 javascript,例如我想查找所有以 A 开头的名称,然后显示所有信息

姓名":"阿尔伯特","年龄":"14"
姓名":"艾莉森","年龄":"14"

这是我的数组 json:

var house = [{"Name":"Jason","age":"43"},
{"Name":"Albert","age":"14"},
{"Name":"Luck","age":"14"},
{"Name":"Alison","age":"14"},
{"Name":"Tom","age":"12"}]

【问题讨论】:

    标签: javascript jquery arrays json


    【解决方案1】:

    你可以使用Array.filter:

    var result = house.filter(function(o) {
        return o.Name.indexOf("A") === 0;
    });
    

    某些旧浏览器可能不支持此方法。在 MDN 上查看the compatibility and the workaround

    【讨论】:

      【解决方案2】:

      您可以使用Array.prototype.filter

      var names_beginning_a = house.filter(
          function (item) {return item["Name"][0].toLowerCase() === 'a';}
      );
      

      一旦你有了这个,你可以使用JSON.stringifyArray.prototype.map将你的数据转换成一个字符串

      var dataAsString = names_beginning_a.map(
          function (item) {return JSON.stringify(item);} // optionally trim off { and }
      );
      

      【讨论】:

      • 请注意,string[i] 访问方法是 not supported in older browsers(例如 IE 6 和 7)。如果您想确定,请使用string.charAt(i)
      • @MattiasBuelens 如果他们不支持string[i],他们将不支持.map.filter.stringify,您需要对所有这些进行填充。
      • 是的,我刚刚意识到这一点。不过,您可以选择仅使用 ECMAScript 5,或者填充这些新方法并使用 charAt
      【解决方案3】:

      您可以过滤数组,以收集名称为“A”的元素,然后将匹配项映射到新的属性名称和值数组

      house.filter(function(itm){
          return itm.Name.charAt(0)== 'A';
      }).map(function(o){
          var A= [];
          for(var p in o){
              if(o.hasOwnProperty(p)){
                  A.push(p+':'+o[p]);
              }
          }
          return A;
      }).join('\n');
      

      /* 返回值:(字符串)*/

      Name:Albert,age:14
      Name:Alison,age:14
      

      如果您需要垫片:

      (function(){
          var A= Array.prototype;
          if(!A.filter)   A.filter= function(fun, scope){
              var T= this, A= [], i= 0, itm, L= T.length;
              if(typeof fun== 'function'){
                  while(i<L){
                      if(i in T){
                          itm= T[i];
                          if(fun.call(scope, itm, i, T)) A[A.length]= itm;
                      }
                      ++i;
                  }
              }
              return A;
          }
          if(!A.map) A.map= function(fun, scope){
              var T= this, L= T.length, A= Array(L), i= 0;
              if(typeof fun== 'function'){
                  while(i<L){
                      if(i in T){
                          A[i]= fun.call(scope, T[i], i, T);
                      }
                      ++i;
                  }
                  return A;
              }
          }
      }
      })();
      

      【讨论】:

      • 例如显示我使用 div $("#list").append(A) 的信息,但它在 1 行中显示了所有信息(姓名:阿尔伯特,年龄:14 姓名:艾莉森,age:14),我怎样才能向我显示 1 行数据?
      • 添加 br 很简单:$("#list").append(A+"
        ")
      【解决方案4】:

      你也可以使用grep函数

      arr = jQuery.grep(house, function (a) { return a.Name.indexOf("A") === 0; });
      

      http://jsfiddle.net/vYZBb/

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        • 2020-04-24
        • 2014-04-07
        • 1970-01-01
        • 2022-06-13
        • 1970-01-01
        相关资源
        最近更新 更多