我有四到五个对象数组,我想通过某种方式过滤,我可以在一个新数组中得到相同的对象
I have four or five arrays of objects and want to filter in a way, I can get same objects in a new array
假设我有这个无序列表和隐藏列表项。{在jsFiddle}
<ul>
<li class="brand pro size color">one</li>
<li class="brand pro color">two</li>
<li class="brand pro size color">three</li>
<li class="pro size color">four</li>
<li class="brand pro size color">five</li>
<li class="pro color">six</li>
<li class="brand pro size color">seven</li>
<li class="brand pro size color">eight</li>
<li class="brand size color">nine</li>
<li class="brand pro color">ten</li>
</ul>
我有四个数组:
var myBrand = $("ul li.brand");
var myPro = $("ul li.pro");
var mySize = $("ul li.size");
var myColor = $("ul li.color");
我想在一个名为mySelected的新数组中有"相同的对象"。
我已经对两个数组这样做了:
var mySelected = myBrand.filter(function() {
return $.inArray(this, myPro) > -1;
});
mySelected.show();
我想知道如何为"四个"或更多数组?
您必须遍历它们。使用EcmaScript 5的every
,您可以:
var mySelected = myBrand.filter(function() {
var li = this;
return [myPro, mySize, myColor].every( function(array) {
return $.inArray(li, array) > -1;
});
});
编辑:根据jQuery的api, filter方法也接受jQuery set作为参数。所以下面的代码应该也能正常工作:
var mySelected = myBrand;
var setsToBeMatched = [myPro, mySize, myColor];
for (var i=0; i<setsToBeMatched.length; i++)
mySelected = mySelected.filter(setsToBeMatched[i]);
如果您想选择所有具有所有四个类的<li>
元素,那么您只需使用选择器并立即选择它们:
var mySelected = $('ul li.brand.pro.size.color');
下面是一个演示:http://jsfiddle.net/btk7r/1/
如果你有一个类数组,这可以更动态:
var class_arr = ['brand', 'pro', 'size', 'color', 'length', 'width'],
mySelected = $('ul li.' + class_arr.join('.'));
相关文章:
- 将数组对象传递到struts2中的操作类
- 如何使用jquery返回php-json数组对象
- 从其名称获取javascript数组对象
- 值未与数组对象绑定
- 如何按数组/对象值的倍数过滤对象数组
- 在表中显示数组对象
- 在数组对象中分组
- 将第二个或多个数组推送到数组对象 AngularJS 中
- 重新排列 JavaScript 数组/对象
- 键上的javascript数组对象过滤器
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 重建有角度的java脚本数组对象
- 对JSON数组对象进行排序
- 连接与数组对象相关的文本:方式和位置
- 哪些浏览器和版本支持将常见的类数组对象直接传递到fn.apply()
- 如何使用Handlebars循环数组对象和模板
- 是否可以引用JS数组/对象中的另一个元素
- Javascript中的名称索引-数组/对象
- 数组长度不等于数组对象