1

以下に示すように、オブジェクトの配列があります。コードの最初のセグメントは、'Item' の複数のオブジェクトが作成され、配列にプッシュされるループ内にあります。

問題の例は、http: //jsfiddle.net/X6VML/
にあり ます。テキスト ボックス内の値を変更すると、重複した項目が表示されることに注意してください。

 // class
 var Item = function(label, value) {
    this.Label = label;
    this.Value = value;
 };

 var obj = new Item("My Label", "My Value");

 // adds object onto array
 itemArray.push(obj);

私が抱えている問題は、以下に示すように、オブジェクトのリストをテーブルにレンダリングする前に除外する必要がある重複オブジェクトが配列に含まれる可能性があることです。

  for (var i = 0; i < itemArray.length; i++) {
      $('.MyTable').append("<tr><td>" + itemArray[i].Label + "</td><td>" + itemArray[i].Value + "</td></tr>");
  }

値が同じで重複しているかどうかを識別できます。値が配列に既に存在するかどうかに基づいて、オブジェクトのリストをフィルタリングするにはどうすればよいですか?

どうもありがとう

4

4 に答える 4

1

配列に重複するアイテムを追加しないでください:

var item = new Item("My Label", "My Value1");

if(!$.grep(itemArray, function(obj) { return obj.Value == item.Value; }).length)
  itemArray.push(item);

"My Value1"に Valueを持つオブジェクトが既に存在する場合はitemArray、追加しないでください。

于 2013-07-03T13:14:05.927 に答える
0

簡単な解決策は次のとおりです。

var temp = [];
$.each(itemArray, function(index, obj){
    var found = false;
    $.each(temp, function(tempI, tempObj){
        if(tempObj.Value == obj.Value){
            found = true;
            return false;
        }
    });

    if(!found){
        temp.push(obj);
    }
});

itemArray = temp;
console.log(itemArray);

上記は、配列内の各オブジェクトを単純に繰り返し処理し、まだ存在しない場合は一時配列にプッシュし、最後に で上書きitemArraytempます。


配列に追加する時点で重複を排除することを検討しましたか? このようなもの:

function UniqueItemList(){
    var items = [];

    this.push = function(item){
        for(var i=0; i<items.length; i++){
            if(items[i].Value == item.Value){
                return;
            }
        }
        items.push(item);
    };

    this.getList = function(){
        return items;
    }
}

var myList = new UniqueItemList();

myList.push(new Item('label1', 'value1'));
myList.push(new Item('label2', 'value2'));
myList.push(new Item('label1', 'value1'));
myList.push(new Item('label1', 'value1'));

console.log(myList.getList());

重複したアイテムをプッシュしようとすると、拒否されます。

デモ- ここではコードに統合されています。

于 2013-07-03T13:08:38.907 に答える
0

このコードで十分です。HTML を形成する前に、itemArray を変更します。

var arr = {};
for ( var i=0; i < itemArray.length; i++ )
    arr[itemArray[i].Value] = itemArray[i];
itemArray = new Array();
for ( key in arr )
    itemArray.push(arr[key]);
于 2013-07-03T12:51:54.710 に答える