2015-06-24 215 views
0

我正在循環一個對象,然後在每個對象上進行比較,以便將它與我的數組中的項目進行比較,以便隨後將不同的對象我的ItemsNotInObject數組。希望有人能爲我發光。先謝謝你。循環遍歷一個對象和循環遍歷數組的一個嵌套for循環

var obj = {a:1, a:2, a:3}; 
var array = [1, 4, 2, 5, 6]; 
var ItemsNotInObject = []; 


for (var prop in obj) { 
    for(var i = 0, al = array.length; i < al; i++){ 
     if(obj[prop].a !== array[i]){ 
      ItemsNotInObject.push(array[i]); 
     } 
    } 
} 

console.log(ItemsNotInObject); 
//output of array: 1 , 4 , 2 , 5, 6 

//output desired is: 4 , 5 , 6 
+0

屬性名必須是不同的。 「{a:1,a:2,a:3}」變成了「{a:3}」。 – Oriol

回答

1
  1. 您的對象有重複的鍵。這是不是有效的JSON對象。讓他們獨特的
  2. 不要訪問像obj[prop].a對象值,obj[prop]a
  3. 克隆原始數組。使用indexOf()檢查數組是否包含對象屬性。
  4. 如果有,請將其從克隆陣列中移除。

var obj = { 
 
    a: 1, 
 
    b: 2, 
 
    c: 3 
 
}; 
 
var array = [1, 4, 2, 5, 6]; 
 
var ItemsNotInObject = array.slice(); //clone the array 
 

 
for (var prop in obj) { 
 
    if (array.indexOf(obj[prop]) != -1) { 
 
    for (var i = 0; i < ItemsNotInObject.length; i++) { 
 
     if (ItemsNotInObject[i] == obj[prop]) { 
 
     ItemsNotInObject.splice(i, 1); //now simply remove it because it exists 
 
     } 
 
    } 
 
    } 
 
} 
 

 
console.log(ItemsNotInObject);

+0

這是一個很簡單的解決方法,我非常感謝你,國王紳士。我真的搞砸了我的json的寫作,它確實以這種形式obj = [{key:value},{key:value},{etc}];但是,切片挽救了我的生命。再次感謝你。 –

1

如果你可以讓你的obj變量爲一個數組,你可以這樣做;

var obj = [1, 2, 3]; 
var array = [1, 4, 2, 5, 6]; 
var ItemsNotInObject = []; 


    for(i in array){ 
     if(obj.indexOf(array[i]) < 0) ItemsNotInObject.push(array[i]); 
    } 

console.log(ItemsNotInObject); 

如果obj變量需要是JSON對象請提供的它適當的形式,所以我可以根據該改變的代碼。

+0

感謝您的幫助,但轉入陣列不是我的應用程序內的選項。 –