Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么用push链接的过滤器会有这样的行为?_Javascript - Fatal编程技术网

Javascript 为什么用push链接的过滤器会有这样的行为?

Javascript 为什么用push链接的过滤器会有这样的行为?,javascript,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(fo

下面是我在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
var arr=[1,2,2,3,3,3,4,4,4]; >var-foo=3; >arr.filter(函数(值){返回值!==foo}); < [1, 2, 2, 4, 4, 4, 4] >arr.filter(函数(值){返回值!==foo}).push(foo); < 8 >arr.filter(函数(值){返回值!==foo}).push(3); < 8 这个
8
来自哪里?

来自,
Array.prototype.push
返回:

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

Chrome控制台显示上一条语句中的最后一个值,这是从
push

返回的,
Array.prototype.push
返回:

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

Chrome控制台显示了上一条语句中的最后一个值,这是文档中推送的返回值

返回
调用方法的对象的新
length
属性

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

来自文档

返回
调用方法的对象的新
length
属性

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

array.prototype.push()
返回新数组的长度,如下所示:

如果要从操作中获取新数组,应使用
array.prototype.concat()
。但你需要这样称呼它:`

arr.filter(function(value) { return value !== foo }).concat([foo]);
另一种方法是将ES6用作:

[ ...arr, foo ]
它将分散阵列的每个元素。您可以在此处进一步查看:

Array.prototype.push()
返回新数组的长度,如下所示:

如果要从操作中获取新数组,应使用
array.prototype.concat()
。但你需要这样称呼它:`

arr.filter(function(value) { return value !== foo }).concat([foo]);
另一种方法是将ES6用作:

[ ...arr, foo ]

它将分散阵列的每个元素。您可以在此处进一步查看:

对于单个值,您可以调用
concat
,而无需将其包装在数组中。对于单个值,您可以调用
concat
,而无需将其包装在数组中