无法过滤唯一ID

时间:2015-07-08 17:33:32

标签: javascript jquery

设置:leftItems& rightItems是5位ID的数组。 matchedItems是所有这些ID的数组 - 有很多具有相同ID的结果。 $matches是一个div,只有在没有将带有该ID的结果添加到列表中时,我才想附加结果。

问题:我在$matches中使用相同的ID继续获取div!但是,我知道我的过滤器确实存在,因为如果我将.toString添加到存在检查中,如下所示:matchedItems.indexOf(litem.toString()),我会得到更多结果。我的支票 使用相同的ID将其降低到2或3个结果,但不要像我想要的那样只有1个。

leftItems.forEach(function (litem) {
    rightItems.forEach(function (ritem) {
        if (litem === ritem) {
            var itemDiv = $('.results.left a[provider-id="' + litem + '"]');
            var miniMe = itemDiv.clone();

            if ( matchedItems.indexOf(litem) === -1 ){
                $matches.append(miniMe);
                matchedItems.push(litem);
            } else { 
                console.log('element exists with id: ' + litem);
            }

        }
    });
});

1 个答案:

答案 0 :(得分:0)

如果您尝试在两个或多个阵列中找到相同的值,那么已经有库可以为您执行此操作。例如:https://lodash.com/docs#intersection

_。交叉口([1,2],[4,2],[2,1]); //→[2]

从这个结果中你可以重新绘制前端所需的任何内容。

说实话,我的例子有点令人困惑,虽然我可以想到很多解决你问题的方法我不确定我真的理解你的用例

编辑:基于你的评论,你应该遵循Michaels的建议并首先在两个阵列上使用concat,然后是第三方unique()函数(在他的,我的情况下,我们都使用lodash,它很棒)