JavaScript:为什么我不能用.push()链接Array.prototype.filter?

如果Array.prototype.filter返回一个数组,为什么我不能立即在这个返回值上调用push()?

例:

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()会导致我期望的元素数量,而不是这些元素的数组?

解决方法:

问题不在于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"]
上一篇:javascript – 如何通过链接早期附加的方法将事件附加到表单的onSubmit事件?


下一篇:javascript – jQuery:链接动画和AJAX请求