是否有任何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核心中。 有一些有用的数组方法: each
, unique
, inArray
。 结合使用,您可以创建自定义内容以满足您的需求。
你正在寻找的更像是一个像遍历这样的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
包含moo
和c3
因为两个对象都包含baz = 1
对。
使函数外观和感觉就像一个jQuery选择器只是语法糖的问题。