2017-02-22 94 views
-4

下面的代碼請問這個功能工作,

var diffArray = function(a, b) { 
    return b.filter(function(value) { return a.indexOf(value) === -1; }); 
}; 

輸入是:

diffArray([1, "3", 3, "4"], [1, "1", 3, 4]); 

我不明白爲什麼它返回:["1", 4]

能否請您澄清,要我。

+3

它不返回。http://jsbin.com/yecanun/1/edit?js,console – Quentin

+0

請添加想要的結果。 –

+0

是什麼你期待函數返回,它實際返回什麼? – Aron

回答

0

解釋一些事情:

Array.indexOf方法是搜索一個特定的元素的陣列,並且如果它發現它返回的元素的索引的方法。如果它沒有返回-1。

Array.filter接收回調函數。這個回調函數對於數組的每個元素都會調用一次,如果元素應該出現在過濾結果中,它應該返回true,否則返回false。例如:[1, 2, 3].filter(function(value) { return value < 3 });將返回[1, 2]

所以你傳遞2個數組到diffArray。 b數組正在被過濾,並且過濾器函數在b數組的每個元素中搜索一個數組,並返回b數組中不存在的每個元素(每個元素的indexOf === -1);因此b元素是[1, "1", 3, 4]。讓我們來看看它一步一步:

  • 1存在於,是因爲我們正在尋找不存在的元素它沒有返回
  • 「1」的,所以它返回不存在。一個數組有1個元素,但是這是一個不同類型的「1」
  • 3是存在的所以它不返回
  • 4是不存在於一個如此返回。再次相同的情況下不同類型的「1」 。

我希望這是更清晰了。

+1

請評論downvotes,這樣我們可以提高:) –