【问题标题】:JavaScript: why can't I chain Array.prototype.filter with .push()?JavaScript:为什么我不能用 .push() 链接 Array.prototype.filter?
【发布时间】:2014-03-22 21:30:15
【问题描述】:

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

【问题讨论】:

    标签: javascript arrays filtering chaining method-chaining


    【解决方案1】:

    现在运行上面的代码并查看结果/错误。

    分析你的答案在运行代码前后的差异

    第二季度。更正代码以便方法链开始工作

    function filterOddNumbers(num) {
        if (num % 2 === 0) {
            return true;
        } else {
            return false;
        }
    }
    

    const evenNumbers = [1, 2, 3, 4, 5].push().filter(filterOddNumbers);

    【讨论】:

      【解决方案2】:

      我建议你使用concat();

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

      【讨论】:

        【解决方案3】:

        问题不在于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"]
        

        【讨论】:

        • 当然,当然……你自己的 SO 问题让你感到愚蠢的时刻之一。
        猜你喜欢
        • 2015-12-13
        • 2012-01-07
        • 2021-05-18
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 2020-05-08
        • 1970-01-01
        相关资源
        最近更新 更多