我有四到五个对象数组,我想通过某种方式过滤,我可以在一个新数组中得到相同的对象

I have four or five arrays of objects and want to filter in a way, I can get same objects in a new array

本文关键字:数组 对象 一个 新数组 我可以 五个 方式 过滤      更新时间:2023-09-26

假设我有这个无序列表和隐藏列表项。{在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('.'));