JavaScript Array.filter()

时间:2015-08-03 18:06:55

标签: javascript arrays filter

Array.filter()方法具有异步行为。 根据文档,在我看来,它不应该以这种方式工作。

此外,在这种情况下,它通常不允许引用回调

我对图书馆的使用有限,但也让我感到困惑,它如何以这种方式做出反应。

我不是 ECMAScript 的专家,我犯了一些错误吗?

我只想过滤一个数组并将结果作为几个选项发送到HTML select元素。

我有这样的事情:

var selCompanyDeps = departments.filter(fromSelectedCompany);

fillSelect($("#selDeparts"), selCompanyDeps, 'departmentID', 'name', selectedID);

function fromSelectedCompany(value){
    var selectedCompany = $( "#SelComps" ).val();
    return (value.companyID===Number(selectedCompany));
}

由于

1 个答案:

答案 0 :(得分:3)

Array.filter不是异步方法,但您看起来令人困惑的是JavaScript程序的执行顺序。

当浏览器解析您的代码时,浏览器将查找命名函数并将其添加到当前作用域中声明的名称列表(称为function hoisting)。

因此,fromSelectedCompany在您致电fillSelect 之前执行,因此您的代码等同于以下内容:

function fromSelectedCompany(value){
    var selectedCompany = $( "#SelComps" ).val();
    return (value.companyID===Number(selectedCompany));
}

var selCompanyDeps = departments.filter(fromSelectedCompany);

fillSelect($("#selDeparts"), selCompanyDeps, 'departmentID', 'name', selectedID);