Javascript js foreach:但仅当比较为真时
如何通过比较控制foreach忽略某些元素 例如,我想要的是这样的:Javascript js foreach:但仅当比较为真时,javascript,knockout.js,Javascript,Knockout.js,如何通过比较控制foreach忽略某些元素 例如,我想要的是这样的: <div data-bind="foreach: entry where (entry.number > 10)"> 所以我想让它做的是循环通过条目,但只在当前条目的数值大于10时执行 这可能做到吗?目前,knockout.js不可能做到这一点,但这是一个有趣的功能。您应该提交一个bug报告/联系作者以考虑将来的版本。 方式1: <div data-bind="foreach: entry">
<div data-bind="foreach: entry where (entry.number > 10)">
所以我想让它做的是循环通过条目
,但只在当前条目
的数值大于10时执行
这可能做到吗?目前,knockout.js不可能做到这一点,但这是一个有趣的功能。您应该提交一个bug报告/联系作者以考虑将来的版本。
方式1:
<div data-bind="foreach: entry">
<div data-bind="if: entry.number > 10"></div>
</div>
方式2:
编写一个自定义筛选方法,为您提供一个与您的条件匹配的元素数组,并在foreach
中使用该方法尝试以下操作:
<div data-bind="foreach: editingItem.columns">
<!-- ko if: Selected-->
<div data-bind="text: Name"></div>
<input type="text"/>
<!-- /ko -->
那怎么办
<div data-bind="foreach: _.filter(entry(), function(item) { return item.number > 10;})">
使用下划线.js我认为最好使用内置的arrayFilter方法(请参阅)
然后,您可以像平常一样将数据绑定到filteredEntries您可以使用函数筛选数组,不要忘记传递“this”
在您回答问题之前,我遵循了方法1,作为替代方法-我想我会坚持下去。谢谢没问题,我知道这是通常的方式,但无论如何都包括在内:DHi@JustMe,很好的答案,我一开始没有发现,直到我做了一些研究。需要注意的是,if绑定可以在注释中工作。修改您的答案,使其特别适用于问题,也可能是一个好主意,例如,使用“entry.number”,这样可以更容易地看到它如何应用于解决问题。感谢@AlexKey I,我是KnockoutJS的新手,我阅读了教程,它们非常有用。非常适合筛选表行。很好!下划线很简单,因为我们已经在使用下划线.js,这很容易实现。
viewModel.filteredEntries = ko.computed(function() {
return ko.utils.arrayFilter(this.entries(), function(item) {
return item.number > 10;
});
}, viewModel);
<div data-bind="foreach: yourArrayHere.filter(function(entry){return entry.number > 10}, this)">