在JavaScript数组中搜索对象

在JavaScript数组中搜索对象,javascript,arrays,Javascript,Arrays,如何在不使用JavaScript中的for循环的情况下搜索数组中对象的属性 如果数组是一个简单的数组,我可以使用array.indexOf(value)来获取索引,但是如果数组是一个对象数组呢?除了循环,还有其他方法吗 例如,ar=[{x,y},{p,q},{u,v}]。如果搜索v,它应该将数组索引返回为2。在数组中搜索值通常需要一个,这要求您在每个项上循环,直到找到匹配项为止 function search(ar, value) { var i, j; for (i = 0; i &l

如何在不使用JavaScript中的
for
循环的情况下搜索数组中对象的属性

如果数组是一个简单的数组,我可以使用
array.indexOf(value)
来获取索引,但是如果数组是一个对象数组呢?除了循环,还有其他方法吗


例如,
ar=[{x,y},{p,q},{u,v}]
。如果搜索
v
,它应该将数组索引返回为2。

在数组中搜索值通常需要一个,这要求您在每个项上循环,直到找到匹配项为止

function search(ar, value) {
  var i, j;
  for (i = 0; i < ar.length; i++) {
    for (j in ar[i]) {  
      if (ar[i][j] === value) return i;
    }
  }
}

search([{'x': 'y'}, {'p': 'q'}, {'u': 'v'}], 'v'); // returns 2;
函数搜索(ar,值){
varⅠ,j;
对于(i=0;i

查找
“x”:,“x”:,“x”:

找到具体财产,成交

提示,提示(但必须对嵌套动物进行适当的减毒和截肢):

查找
“x”:“y”:“p”:“u”:“v”:“x”:“y”:“x”:”
(所有属性-立即完成?)

更多(更多)的大脑疲劳疼痛会发现
x:
数组位置的值和索引(提示计数顶层

截去并减弱提示(仅删除嵌套数组和对象
,请参见):

皱纹:

  • .toSource()
    JSON
    更强大(但…见上文),处理的情况也更多 参考:

  • 如果有怪物的字符串包含:
  • 的。如<代码>[“,”或“,{p:“1,2,3,”}]
  • {x:…}
    {“x”:…}
    。如<代码>['{x:…}',“和”,“{x:…}”,]
    (这将使用
    JSON
    toSource
    破坏上述编码)
  • 巢状怪物
  • 其他的怪物只是嵌合体。。。没有足够的报酬去做或证明

  • 是的,这样我就明白了。我想如果有一些内置函数来执行搜索,比如我们可以使用array.sort()和compare函数根据objects属性对数组进行排序。@sat:不太可能。以下是可用于阵列的方法:。在JavaScript1.6中有
    filter()
    方法,但这对于您的需求来说仍然太复杂。
    javascript:
       /* quick fix naive short solution to be posted soon */
       /* array of objects with primitive property values only and no wrinkles */
    
    javascript:
       alert(
          JSON.stringify(
             [{x:1,y:2},,,{p:"q"},{u:{},vx:[],x:{y:{},x:5}}]
                 ) . match(/"x":/g)
        )
    
    javascript:   /*  Does the need to fortify this code imply JSON is stronger?  */
       alert(                                             /*  See wrinkles below  */
          [{x:1,y:2},,,{p:"q"},{u:{},vx:[],x:{y:{},x:5}}] . toSource() .
     /*
             match(/({|,)\s*x:/g) . join() . replace(/({|,)\s*x:/g,"x:")
       finds `x:,x:,x:`
     */
             replace(/(({|,)\s*)([^,{:]*):/g,'$1"$3":') . match(/"x":/g)
        )
    
    javascript:
        alert(
            JSON.stringify([{x:1,y:2},{p:"q"},{u:{},v:[],x:{y:{},x:5}}]) . 
                 match(/"[^"]*":/g)
        )
    
    javascript:debug=false;
       animal=[
          {x:1,y:2},,,{p:"q"},
             [ {u:{},vx:[,,], x:{y:{xx:''},x:5} }, "hmmm comma x colon \" monster" ],
       ];
       animal=animal.toSource().replace(/\[(.*)]/,"$1");
    /*  */ if(debug){
       alert(animal);
       animal=animal.replace(/\[([^[\]]*)\]/g,
                   function(a,b,c,d){alert([a,b,c,d].join("\n\n"));return a});
       while(animal.search(/\{.*\}|\[.*\]/)>-1){
          animal=animal.replace(/\{([^{}]*)\}|\[(.*)\]/g,
             function(a,b,c,d){alert([a,"\n",b,"\n",c]);return b.replace(/,/g,";")});
          alert(animal); }
    /*  */   }
    
      /* the while loops on nesting depth not top array length */
       while(animal.search(/\{.*\}|\[.*\]/)>-1)
          animal=animal.replace(/\{([^{}]*)\}|\[(.*)\]/g,       /* implicit g loop */
                      function(a,b,c,d){return (b+c).replace(/,/g," ")}); /* ditto */
       alert(animal);    /* as opposed to a non-lert animal? */