JavaScript数组筛选()

3
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));
}

谢谢


5
.filter 不是异步方法。 - tymeJV
1
它不提供回调,因为它 不是 异步的。我无法辨别出这里是否有问题。 - Alex Booker
departments 包含什么内容? - axelduch
是的,我看到了。filter 不是一个异步方法 tymeJV,这就是我的问题 Petrichor。 - Pedro Guedes
aduch,departments是一个数组。 - Pedro Guedes
1个回答

6

Array.filter不是一个异步方法,但你似乎混淆了JavaScript程序的执行顺序。

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

因此,在调用fillSelect之前,fromSelectedCompany被执行,所以你的代码等价于以下代码:

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

var selCompanyDeps = departments.filter(fromSelectedCompany);

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

感谢 Toothbrush,我知道变量提升,但我不知道还有函数提升。 - Pedro Guedes
太好了!它可以运行。我刚把函数作为匿名函数放在.filter里面,就解决了这个问题。再次感谢@toothbrush,感谢所有试图帮助的人var selCompanyDeps = departments.filter(function (value){ var selectedCompany = $( "#SelComps" ).val(); return (value.companyID===Number(selectedCompany)); }); - Pedro Guedes
@PedroGuedes,好的,很高兴能帮到您。 - Toothbrush

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接