2016-03-25 14 views
0

配列に一意の名前付きオブジェクト(重複なし)のみを追加しようとしていますが、そのためにまずオブジェクトが既に存在するかどうかを確認する必要があります配列。残念ながら、私の試みはすべて、アレイに重複したオブジェクトを追加し続けます。私は各オブジェクトの配列を1つ1つチェックして、追加したいオブジェクトが既に配列に入っているかどうかを調べることができます。もしそうなら、私は何もしません。したがって、配列内のitem.ORGとオブジェクトの名前が一致するかどうかチェックしています。これは一致するかどうかを調べるのに役立ちますが、一致しない場合、配列にさらにオブジェクトを追加するため、新しいオブジェクトを配列に追加したくありません。私の最近の試みは、どちらもうまくいきません。あなたのループでは配列内のオブジェクトの存在を確認する方法

//constructor for OrgObj that goes in ORRArr 
function OrgObj(itemOrg) { 
    this.name = itemOrg; 
    this.count = 0; 
    this.url_status_list = []; 
} 

var ORGArr = []; 

$.each(_items, function(index, item) { 
      var weFoundIt = true; 

      if (ORGArr.length === 0) { 
       ORGArr.push(new OrgObj(item.ORG)); 
      } else { 
       for (var i = 0; i < ORGArr.length; i++) { 
        if (item.ORG === ORGArr[i].name) { 
         break; 
        } else { 
         weFoundIt = false; { 

         } 
        } 
        if (weFountIt === false) { 
         ORGArr.push(new OrgObj(item.ORG)); 
        } 
       }); 

答えて

0

あなたはfalseweFoundItを初期化する必要がありますし、あなたがそれを見つけた場合にのみtrueに設定します。また、ループの後ろに小切手を置いて、最後の条件文(​​の代わりにfoundではなく)にも入力ミスがあります。ここでは実施例である:https://jsfiddle.net/y4b80wcc/

短い代替はhttps://jsfiddle.net/xdwzfghr/1/

if(ORGArr.map(function(x){return x.name;}).indexOf(item.ORG) === -1) { 
    ORGArr.push(new OrgObj(item.ORG)) 
} 
+0

、私はまだそれがfalseにweFoundItを変更することにより、仕事を得るように見えることはできません。また、F12ツールを使用すると、マップがサポートされていないと表示されます。他のアイデア? –

+0

あなたのインデントが括弧に対応していないことに気付きました。あなたの 'if(weFountIt === false)'は実際にループ内にあります。あなたはループの後ろに置くべきです。また、あなたの 'の'の代わりに 'fount'を書いたタイプミスがあります。次に、実際の例を示します。https://jsfiddle.net/y4b80wcc/ – bnord

0

だろう、私はfilterメソッドを使用します。

//constructor for OrgObj that goes in ORRArr 
function OrgObj(itemOrg) { 
    this.name = itemOrg; 
    this.count = 0; 
    this.url_status_list = []; 
} 

var ORGArr = []; 
var _items = [new OrgObj('A'), new OrgObj('B'), new OrgObj('C'), new OrgObj('B'), new OrgObj('B'), new OrgObj('A'), new OrgObj('D')] 


var foundNamesLookup = {}; 
ORGArr = _items.filter(function(item) { 
    if (foundNamesLookup [item.name]) { 
    return false; 
    } 
    foundNamesLookup [item.name] = true; 
    return true; 
}); 

console.log(ORGArr); 

EDIT:https://jsfiddle.net/yoy0s7cL/(コンソールに結果を参照してください)

関連する問題