在对象列表中找到重复项并在JavaScript中分开

时间:2014-07-10 13:37:14

标签: javascript design-patterns dojo amd

在dojo / javscript应用程序中

我正在尝试找到下面这个对象列表中找到重复项的最有效方法:

{ item: "A", value: "one" }, 
{ item: "B", value: "two" },
{ item: "C", value: "three" },
{ item: "B", value: "two" },
{ item: "D", value: "five" },
{ item: "C", value: "three" }

所以我作为成品需要的是:

找不到列表:

{ item: "A", value: "one" }, 
{ item: "D", value: "five" }

找到列表:

{ item: "B", value: "two" },
{ item: "C", value: "three" }

另外,我正在使用DOJO AMD所以我知道我有forEach,过滤器,有些可供我使用

我知道我可以做第一遍以获得重复值:

var split = function( list )
{
  var found = [];
  var objectList = lang.clone( list );

  var test = objectList.pop();

    objectList.forEach( function( inner )
    {
        if( test.item == test.item )
        {
            found.push( test.item );
        }

    } );
return found;
};

2 个答案:

答案 0 :(得分:1)

如果您使用Java:停止使用列表。使用Set。这解决了所有问题。 Sry,你可能会感到失望,但答案很简单。

答案 1 :(得分:0)

您最好的方法是正确存储数据。

您可能仍然需要存储非唯一项目,如果是这样 - 继续使用ArrayList,但另外,请使用以下内容:

覆盖哈希码&等于此链接中显示的功能:What issues should be considered when overriding equals and hashCode in Java?

然后,使用Set(HashSet可能就足够了)来存储所有对象。此数据结构将忽略对于集合中已有元素不唯一的元素。

然后,您需要做的就是查询集合的大小,并为您提供列表中唯一元素的数量。