为什么用push推送的过滤器表现得像这样?

时间:2016-01-29 16:40:23

标签: javascript

以下是我在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来自何处?

3 个答案:

答案 0 :(得分:2)

the MDN docsArray.prototype.push返回:

  

调用方法的对象的新长度属性。

Chrome控制台显示上一个语句的最后一个值,即push的返回值。

答案 1 :(得分:2)

来自push文档

  

<强>返回
  调用方法的对象的新length属性。

在您的情况下,filter返回一个包含7个元素的数组。将另一个元素推到其上后,该数组有8个元素,这就是push返回的内容。

答案 2 :(得分: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