2014-02-08 79 views
3

我排除的數組象下面這樣:的JavaScript只刪除第一場比賽在數組中循環

Exclusions: [ID:"233242", Loc:"West", ID:"322234" , Loc:"South"] 

我還對象嵌套的數組對象的,可能看起來像

Schools : [ O: [ ID:"233242" ] , 1:[ ID:"233242"] , 2: [ID :"954944"] ] 

我需要從學校對象中刪除任何具有相同ID的匹配數組索引,但僅在的第一場比賽中使用。這意味着元素0應該被刪除,但元素1仍然在那裏。什麼是解決我的環的最佳方法:

$.each(Exclusions, function (index, value) { 
    var loc = value.Loc; 
    var ID = value.ID; 
    Object.keys(Schools.District.Pack[loc]).forEach(function (key) { 
     //i need to scan through the entire object 
     if (Schools.District.Pack[loc].ID === ID) { 
      //remove the first match now stop looking 
      Schools.District.Pack[loc].splice(key, 1); 

      //break ; incorrect 
     } 
    }); 
}); 
+0

'return false'將結束每個循環,但由於您有兩個嵌套,您還需要在內部循環中設置某種標誌,以便您可以在外部循環中檢查br也可以吃掉。 – CBroe

+0

@Cbroe我正在考慮使用IndexOf,但這不起作用,加上我認爲另一個數組掃描太密集 – Edward

回答

1

我想說具有刪除ID的另一個查找數組,而你需要像這樣

var Exclusions = [{ID:"233242", Loc:"West"}, {ID:"322234" , Loc:"South"}]; 
var Schools = [{ ID:"233242" } ,{ ID:"233242"} , {ID :"954944"} ]; 

var removedKeys = []; 

$.each(Exclusions, function (index, value) { 
    var loc = value.Loc; 
    var ID = value.ID; 
    Object.keys(Schools).forEach(function (key) { 
     //i need to scan through the entire object   
     if ((Schools[key].ID === ID) && (removedKeys.indexOf(ID) == -1)) { 
      removedKeys.push(ID); 
      //remove the first match now stop looking    
      delete Schools[key]; 
     } 
    });  
}); 
console.log(removedKeys); 
console.log(Schools); 

希望這將有助於

fiddle

+0

我喜歡這種方法與刪除的問題是,將數組元素設置爲undefined而不是完全從數組中刪除它,但它確實有效。 – Edward