2012-12-18 25 views
0

我的目標是比較兩個不同的JSON服務並顯示不同的div。服務A顯示用戶註冊的列表。服務B顯示所有可用列表。我希望能夠在一個div中顯示用戶的列表,並在另一個div中顯示主列表中剩餘的列表。Jquery或JS從兩個JSON調用中獲得差異

這兩組信息都來自內部JSON服務。 我的第一種方法是從每個列表中獲取列表ID(它們是相同的)並將它們存儲在數組中並比較數組。 服務A(OB1):

1,2,3,4 

服務B(OB2):

-1,1,2,3,4 

這裏是比較,其中來自另一SO

$.grep(ob1, function (el) { 
     if ($.inArray(el, ob2) == -1) diff.push([el, IDl]); 
    }); 

結果開始: 如果用戶有1個列表ID,然後只有一個結果帶有來自JSON調用中最後一個項目的ID,而不是與名稱關聯的4個結果。關聯的名稱是被推入最後一個數組的「IDl」。 任何幫助將是偉大的。

+0

我不明白你的問題。你想將你的ID轉換成什麼?一個名字?我在你的問題中沒有看到任何名字。 – Blazemonger

+0

我想比較ID的ID並列出在一個div中相同的ID和另一個ID不同的ID。 ID的名稱是關聯的,我將關聯的名字傳入最終數組(diff) – atlMapper

+0

使用'grep'但是返回undefined'的意義是什麼?你想要一個簡單的for循環嗎? – Bergi

回答

0

循環在你的更大的陣列,而不是你的小之一:

$.grep(ob2, function (el) { 
    if ($.inArray(el, ob1) == -1) diff.push([el, IDl]); 
}); 
+0

所以有些事情似乎很奇怪。當我運行這一切時,所做的就是將ob2中的所有值重新存入新數組中。我沒有注意到diff = ob2 – atlMapper

+0

@atlMapper是的,如果它們不在'ob1'中,它會將'ob2'的值複製到'diff'中。這不是你問的嗎?我不確定你打算用'IDl'部分,所以我把它放在原來的位置。 – freejosh

+0

謝謝,這是正確執行我要修改這一點。這是一個好的開始,雖然...非常感謝 – atlMapper

0

你想把兩個數組的不相交作爲第二個數組。

var ob2 = $.grep(ob2, function(elem) { return $.inArray(elem, ob1) == -1; }); 

然後你就可以顯示ob1ob2內容。

+0

所以這給了我和我創建的循環相同的響應。有沒有更好的方法來實現比較兩個JSON調用並顯示相同和不同的項目的目標?我覺得我過於複雜這個概念 – atlMapper

+0

@atlMapper它的工作原理和它是一條線..這是如何複雜? –

+0

謝謝,但不是你的解決方案,但我的方法是:將數據轉儲到數組中並比較數組是否是最好的方法? – atlMapper

相關問題