是否有任何 jquery 功能可以以与 DOM 类似的方式查询多维数组?
Posted
技术标签:
【中文标题】是否有任何 jquery 功能可以以与 DOM 类似的方式查询多维数组?【英文标题】:Are there any jquery features to query multi-dimensional arrays in a similar fashion to the DOM? 【发布时间】:2011-03-12 14:18:43 【问题描述】:问题是怎么说的……
jQuery 是否有任何方法可以让您以与 DOM 类似的方式查询多维对象数组。
例如,给我一个包含在具有某些匹配属性值的多维数组中的对象列表 - 例如 StartOfPeriod 大于指定日期或 name == "Ben Alabaster"
如果已经有一些东西,我想避免重新发明***。
【问题讨论】:
+1 个有趣的问题 那么你会如何想象这种外观?$(obj).find("*[StartOfPeriod='Ben Alabaster']");
?
@Dan Heberden - 我想我并没有特别想到它看起来有什么特别之处,但我想你建议的语法已经足够好了。
【参考方案1】:
您不能使用选择器语法,但 jQuery 带有 $.grep 和 $.inArray,这对这很有用。 grep
返回与谓词匹配的新元素数组。 inArray
返回第一个匹配元素的索引,或 -1。例如:
var matches = $.grep(array, function(el)
return el.StartOfPeriod > 2000;
);
这些类似于标准的 ECMAScript 方法,Array.filter
(类似于grep
)和Array.indexOf
(类似于inArray
); jQuery 实际上在可用的情况下使用Array.indexOf
。还有其他有用的 ECMAScript 方法,例如Array.every
(所有元素匹配)和Array.some
(至少一个匹配)。 MDC 有可以添加到项目中的代码,因此这些代码可以在没有本机实现的浏览器中工作。
【讨论】:
这在单维数组上效果很好,我已经考虑过这一点,我可以将它用作插件的基础,但我只是想知道是否已经存在处理多维数组的东西维数组 - 即 2D、3D 等【参考方案2】:您可能会找到一个插件,但不是在 jQuery 核心中。有一些有用的数组方法:each
、unique
、inArray
。结合起来,您可以创建一些定制的东西来满足您的需求。
您正在搜索的更多的是带有 xpath 的集合库,例如遍历。 Prototype 有一组更大的数组方法。但开箱即用可能仍无法满足您的确切需求。
我同意 alex,这样的库/扩展会很有趣。
【讨论】:
我正在考虑编写上述扩展,但我不想不必要地重新发明***。 这绝对是一个很棒的扩展。我可能会在 snicker 空闲时间开始写作。 @Ryan Kinal:找个借口为你的一个客户需要一个;)我只是想弄清楚我想要选择器语法的样子,可能就像常规语法一样.如果您确实编写了一些东西,也许我们可以互相交流一些想法。 @Ryan Kinal - 我已经完成了第 1 部分和第 2 部分的工作,我已经将过滤器功能插入 jQuery 并运行,只需要弄清楚如何使用它来设置它以使用选择器语法现在。 我正在设计一些东西。我不知道我是否真的会把它变成代码,但谁知道呢。我收藏了这个问题,所以我会经常回来查看。【参考方案3】:我刚写了这个..我认为它可以正常工作,但肯定可以清理:)
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 选择器只是语法糖的问题。
【讨论】:
我也有一些非常相似的东西,我只是想修改它,以便我可以使用选择器语法将它插入到 jQuery 中。不过我之前没有写过任何 jQuery 插件,所以我只是想把头绕过去。以上是关于是否有任何 jquery 功能可以以与 DOM 类似的方式查询多维数组?的主要内容,如果未能解决你的问题,请参考以下文章