是否有任何 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 核心中。有一些有用的数组方法:eachuniqueinArray。结合起来,您可以创建一些定制的东西来满足您的需求。

您正在搜索的更多的是带有 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 包含 mooc3,因为这两个对象都包含 baz = 1 对。

让函数看起来和感觉像一个 jQuery 选择器只是语法糖的问题。

【讨论】:

我也有一些非常相似的东西,我只是想修改它,以便我可以使用选择器语法将它插入到 jQuery 中。不过我之前没有写过任何 jQuery 插件,所以我只是想把头绕过去。

以上是关于是否有任何 jquery 功能可以以与 DOM 类似的方式查询多维数组?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery DOM

是否有任何方法或程序可以防止 jQuery 应用除当前类之外的所有相同类?

jQuery 选择器可以与 DOM 变异观察者一起使用吗?

使用 jQuery 检查任何祖先是不是有一个类

怎样判断一个对象 是 jquery对像 还是dom对象

是否可以使用 jquery 从 dom 中删除 html 注释