2015-11-04 41 views
0

上午有2陣列的一個與下面格式濾波器陣列目的是通過與其他Array對象比較

var obj1 = [{ 
    "Name": "Test1", 
    "id": 3 
}, { 
    "Name": "Test2", 
    "id": 4 
}]; 

,另一個

var obj2 = [{ 
    "visible": "true", 
    "id": 1 
}, { 
    "visible": "true", 
    "id": 2 
}, { 
    "visible": "true", 
    "id": 3 
}, { 
    "Name": "Test3", 
    "id": 4 
}, { 
    "visible": "true", 
    "id": 5 
}, { 
    "visible": "true", 
    "id": 6 
}]; 

我需要比較OBJ1和OBJ2和從刪除的項目obj2不在基於Id的obj1中。並且總是在obj2中,我的ID 1和2不應該被刪除。

我的最終O/p應該

var output = [{ 
    "visible": "true", 
    "id": 1 
}, { 
    "visible": "true", 
    "id": 2 
}, { 
    "visible": "true", 
    "id": 5 
}, { 
    "visible": "true", 
    "id": 6 
}] 

因此,我已保留1 & 2從物鏡2和移除項目5 & 6未列出是按照相同的順序OBJ1。

我已經嘗試了循環和使用切片,並最終沒有在哪裏。一些幫助將是巨大的

感謝

+0

@Tushar我會更新問題,我曾嘗試用循環旁邊的另一個和比較。但認爲其他一些簡單的方法會存在 – Peru

回答

0

您可以使用jQuery的.filter()功能和內置的Javascript功能.some()此:

var output = obj2.filter(function (elem) { 
    return !obj1.some(function (obj) { 
     return obj.id === elem.id; 
    }); 
}); 

output將包含過濾陣列。

+0

'filter'和'some'不是jQuery的函數。這個解決方案也不排除id和2 –

+0

@CharlieH就像我在我的回答中所說 - 有一個'.filter()'JQuery函數,但'.some()'是一個Javascript(你甚至可以看我的鏈接)。 我也修復了我的答案,因爲我的代碼只輸出包含在兩個數組中的元素,而不是排除它們。 – spongeworthy

0

使用Array.prototype.some方法通過Array.prototype.filter方法來比較和調整數組。

這裏是一個函數:

function compareArrays() { 

     //use filter method to create a new array after iteration of obj2 
     return obj2.filter(function (obj2Item) { 

      //Use some method to iterate obj1 
      return obj1.some(function (obj1Item) { 

       //Exclude desired items here 
       return (obj1Item.id === obj2Item.id) || (obj2Item.id === 1) || (obj2Item.id === 2); 
      }); 

     }); 

    }; 

看到這些方法的工作原理。

Array.prototype.filter

Array.prototype.some

0

您可以使用地圖功能來篩選基於條件的indexOf和檢查項目的項目中存在的條件。

var obj1 = [{ 
    "Name": "Test1", 
    "id": 3 
}, { 
    "Name": "Test2", 
    "id": 4 
}]; 

var obj2 = [{ 
    "visible": "true", 
    "id": 1 
}, { 
    "visible": "true", 
    "id": 2 
}, { 
    "visible": "true", 
    "id": 3 
}, { 
    "Name": "Test3", 
    "id": 4 
}, { 
    "visible": "true", 
    "id": 5 
}, { 
    "visible": "true", 
    "id": 6 
}]; 

var filterObject = $.map(obj2, function (v){ 
    if (v.id == 1 || v.id == 2) { 
     return v; 
    } 
    else { 
     var ids2 = $.map(obj1, function (vId){ 
      return vId.id; 
     }); 

     if (ids2.indexOf(v.id) != -1) { 
      return v; 
     } 
    } 
});