Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript js foreach:但仅当比较为真时_Javascript_Knockout.js - Fatal编程技术网

Javascript js 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">

如何通过比较控制foreach忽略某些元素

例如,我想要的是这样的:

<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)">