是否有任何jqueryfunction以与DOM类似的方式查询多维数组?

问题是什么……

jQuery是否有任何方法允许您以与DOM相似的方式查询多维对象数组。

例如,给我一个包含在具有一些匹配属性值的多维数组中的对象列表 – 例如,其中StartOfPeriod大于指定日期或其中name ==“Ben Alabaster”

如果已经存在某些东西,我想避免重新发明轮子。

你不能使用选择器语法,但jQuery带有$ .grep和$ .inArray ,这对此很有用。 grep返回与谓词匹配的新元素数组。 inArray返回第一个匹配元素的索引,或-1。 例如:

 var matches = $.grep(array, function(el){ return el.StartOfPeriod > 2000; }); 

这些类似于标准ECMAScript方法, Array.filter (simimlar to grep )和Array.indexOf (类似于inArray ); jQuery实际上在可用的地方使用了Array.indexOf 。 还有其他有用的ECMAScript方法,例如Array.every (所有元素匹配)和Array.some (至少一个匹配)。 MDC具有可以添加到项目中的代码,因此这些代码可以在没有本机实现的浏览器中使用。

你可能会找到一个插件,但不是在jQuery核心中。 有一些有用的数组方法: eachuniqueinArray 。 结合使用,您可以创建自定义内容以满足您的需求。

你正在寻找的更像是一个像遍历这样的xpath集合库。 Prototype有一组更大的数组方法。 但仍然可能无法满足您的确切需求。

我同意亚历克斯 ,这样的图书馆/扩展会很有趣。

我刚刚写了这个..我认为它工作正常,但它肯定可以清理:)

 function findMatchingObjects(obj, member, value){ var final = new Array(); var temp = new Array(); for(var p in obj){ if (typeof obj[p] == 'object' ) { temp = findMatchingObjects(obj[p], member, value); if (temp.length == 1) final.push(temp[0]); } if (p == member && obj[p] == value) { final.push(obj); } } alert(final.length); return final; } 

像这样使用它:

 var moo ={baz: 1, boo: 2, bar:{c1: 3, c2: 4, c3:{t:true, f:false, baz:1}},d: 11}; var foo = findMatchingObjects(moo, "baz", 1); // did it work? console.log(foo); 

返回与成员 – 值对匹配的对象(或子对象 )数组。 在这种情况下, foo包含mooc3因为两个对象都包含baz = 1对。

使函数外观和感觉就像一个jQuery选择器只是语法糖的问题。