2014-02-21 51 views
0

如果Array.prototype.filter返回一個數組,爲什麼我不能立即調用push()這個返回值?JavaScript:爲什麼我不能使用.push()連接Array.prototype.filter?

實施例:

var arr = ["a", "ab", "c", "ad"]; 
var arr2 = arr.filter(function(elmnt) { return elmnt.indexOf("a") > -1; }); 
// result: ["a", "ab", "ad"] 

arr2.push("aaa"); 
// result: ["a", "ab", "ad", "aaa"] 

好爲止。

但是如何鏈接push()致電filter()致電?

var arr = ["a", "ab", "c", "ad"]; 
var arr2 = arr.filter(function(elmnt) { return elmnt.indexOf("a") > -1; }).push("aaa"); 
// result: 4 

爲什麼鏈接filter()push()結果,我所期望的,而不是那些元素的數組中元素的個數?

回答

5

問題不在filter()返回什麼,而是它與push()返回。

push()返回數組的新長度,而不是數組本身。

所以,當你這樣做:

var arr2 = arr.filter(function(elmnt) { return elmnt.indexOf("a") > -1; }).push("aaa"); 

arr2將被分配陣列(這恰好是4你的情況)的新長度,而不是新的陣列本身。

修改後的版本是會做你想要將是什麼:

var arr = ["a", "ab", "c", "ad"], arr2; 
(arr2 = arr.filter(function(elmnt) { return elmnt.indexOf("a") > -1; })).push("aaa"); 
// now arr2 is ["a", "ab", "ad", "aaa"] 
+0

當然,當然......在您自己的SO問題,讓你覺得自己很蠢的一個時刻。 – awj

相關問題