2016-01-29 49 views
1

這是我在Chrome的JavaScript控制檯做:爲什麼過濾器鏈式推動像這樣?

> var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]; 

> var foo = 3; 

> arr.filter(function(value) { return value !== foo }); 
< [1, 2, 2, 4, 4, 4, 4] 

> arr.filter(function(value) { return value !== foo }).push(foo); 
< 8 

> arr.filter(function(value) { return value !== foo }).push(3); 
< 8 

從何從這個8

回答

2

push文檔

返回
在其上的方法被調用的對象的新屬性length

在你的情況下,filter返回一個包含7個元素的數組。將另一個元素推到它上面後,數組有8個元素,這就是push返回的內容。

2

the MDN docsArray.prototype.push返回:

在所述方法被調用的對象的新的長度屬性。

Chrome控制檯顯示前一條語句的最後一個值,即從push返回的值。

0

Array.prototype.push()返回新數組的長度,你可以在這裏看到:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

如果你想從你的操作一個新的數組,你應該使用Array.prototype.concat()。但是,那麼你就需要調用它想:'

arr.filter(function(value) { return value !== foo }).concat([foo]); 

另一種方法是使用ES6爲:

[ ...arr, foo ] 

它會蔓延的陣列中的每個元素。您可以在這裏進一步瞭解:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator

+1

同樣對於單個值,您可以調用'concat'而不將其包裝到數組中 –

相關問題