2016-03-25 20 views
0

我想添加唯一的命名對象(無重複)到一個數組,爲了做到這一點,我必須首先檢查,看看對象是否已經存在陣列。不幸的是,我所有的嘗試都不斷向數組中添加重複的對象。我可以逐個檢查每個對象的數組,以查看我要添加的對象是否已經在數組中,如果是,我什麼也不做。所以,我正在檢查我的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

在你的循環,你應該初始化weFoundItfalse,只將其設置爲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

我似乎仍不能得到它通過改變weFoundIt假工作。另外,當我使用F12工具時,它說地圖不受支持。任何其他想法? –

+0

我只注意到你的縮進與括號不一致。你的'if(weFountIt === false)'實際上在循環中。你應該把它放在循環之後。此外,還有一個錯字,你在if中寫了'fount'而不是'found'。這是一個工作示例: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); 

編輯:https://jsfiddle.net/yoy0s7cL/(見控制檯結果)

相關問題