2014-09-03 95 views
0

這個小提琴顯示瞭如何抓取不在數組中的元素,基於鍵值9在我的案例id)。Javascript - 基於鍵值獲取兩個基於鍵值的數組之間的差異而不使用Array.prototype.filter

http://jsfiddle.net/wgmz40ow/

這種溶液從這裏取:Difference between two array of objects in JavaScript

之前發現解決方案,我試圖用簡單的for循環來與僅包括在a對象而不是在b數組結束。

有人可以不使用javascripts Array.prototype.filter函數提供解決方案嗎?

編輯:在我的情況下,我特別想處理一個數組b總是數組a的子集。

我也陷入了嵌套循環的麻煩,但一旦我打破了內環伸到一個功能我能搶的解決方案非常迅速:

http://jsfiddle.net/xzy9Lyr0/

不幸的是,我明白爲什麼其他解決方案是最好的 - 我的將不會返回真正的差異,只有a而不是b中的元素,除非我連接兩個返回的數組(http://jsfiddle.net/xzy9Lyr0/2/)。

+2

Trivially:寫'過濾器'。無論如何,簡單的for * * will *工作(過濾器只是一個在選擇器函數應用於結果累加邏輯的循環頂部的花哨裝飾)並且具有相同的複雜度,即O(n^2)。 – user2864740 2014-09-03 23:22:27

+1

請發佈代碼,您嘗試使用for循環 – dc5 2014-09-03 23:22:30

+2

我們大多數人不會提供現成的解決方案。但是,如果您自己嘗試,我們將幫助您解決遇到的任何具體問題。現在沒有問題陳述,只是「給我代碼」。 – Jon 2014-09-03 23:24:24

回答

0

下面是一個可能包含惡作劇痕跡的答案。

在通過學習擴大@喬恩呼籲理解的利益,這裏有一個既簡單又複雜的解決方案:

var bstr = JSON.stringify(b); 
for (var i = a.length - 1; i >= 0; i--) { 
    if (!~bstr.indexOf(JSON.stringify(a[i]))) { 
     c.push(a[i]); 
    } 
} 

享受!

編輯:修正錯字。