【发布时间】:2013-03-26 17:28:03
【问题描述】:
我有一个多维关联数组。
this.items = ko.observableArray([
{ name: "name1", viewable: true, children: [
{ name: "name1-1", viewable: true, children: []},
{ name: "name1-2", viewable: false, children: []}
] },
{ name: "name2", viewable: false, children: [] },
{ name: "name3", viewable: true, children: [
{ name: "name3-1", viewable: true, children: []},
] },
{ name: "name4", viewable: true, children: [] }
]);
目标是遍历这个数组并只打印出 'viewable' 设置为 true 的值。
我使用一堆 if 和 foreach 语句来完成这项工作,但代码开始失控。这个例子只涵盖了 2 层,我的数组可以达到 5 层深度,所以这段代码会成倍增加并变得丑陋真的很快。
<ul data-bind="foreach: items">
<!-- ko if: viewable -->
<li data-bind="text: name"></li>
<!-- ko foreach: children -->
<!-- ko if: viewable -->
<li data-bind="text: name"></li>
<!-- /ko -->
<!-- /ko -->
<!-- /ko -->
</ul>
那么有没有更简单/更好的方法来遍历整个数组?
【问题讨论】:
-
你有适当的递归结构吗?例如。每个级别的项目看起来都一样吗?在您的示例中,缺少一些
children,例如:{ name: "name1-1", viewable: true},这是一个要求吗? -
哦,打错字了。我可以控制它,所以我认为最好包括“孩子”,即使它是空的。我编辑了我的代码并将子项添加到所有项目中。所以,是的,所有项目在所有级别上看起来都一样。
标签: javascript arrays multidimensional-array knockout.js