将对象与数组中的前一个对象进行比较

时间:2014-05-22 16:10:55

标签: javascript html knockout.js

下午堆,

我对JS和淘汰赛相对较新,我想我遇到了一个简单的问题。 我试图将这些术语与每个类分开并相应地对它们进行分组。

即。   

W13

    Adv Cptr Architecture(CPHE-533-A)

W14

    高级数据库系统(CPTR-521-A)

后台的对象是

"Classes": [
 {
  "FullName":"W13 Adv Cptr Architecture (CPHE-533-A)",
 --Irrelevant information
 },
 {
  "FullName": "W14 Adv Database Systems (CPTR-521-A)",
 --Irrelevant information
 }
 ]

我对淘汰赛的呼吁是

 <ul class="myclasses-container" data-bind="foreach: myclasses.Classes">
 <!-- ko if: $index() === 0 -->
<p style="font-weight: bold; font-size:16px" data-bind= "text: getTerm(FullName())"></p>
 <!-- /ko -->
 <!-- ko if: $index() !== "0" -->
            <!-- I think this is the line of code that is giving me trouble -->
        <!-- ko if: (getTerm(FullName()) != getTerm($parent.myclasses.Classes()[$index()-1].FullName)) -->
          <p style="font-weight: bold; font-size:16px" data-bind= "text: getTerm(FullName())"></p>
    <!-- /ko -->
 <!-- /ko -->

Javacript:

<script>
function getTerm(name) {
return name.substring(0, name.indexOf(' '));
 }
 function nameWithoutTerm(name) {
return name.substring(name.indexOf(' ') + +1);
}
</script>

呈现HTML:

 <ul class="myclasses-container" data-bind="foreach: myclasses.Classes">
 <!-- ko if: $index() === 0 -->
<p style="font-weight: bold; font-size:16px" data-bind= "text: getTerm(FullName())"> W13</p>
 <!-- /ko -->
 <!-- ko if: $index() !== "0" -->
    <!-- ko if: (getTerm(FullName()) != getTerm($parent.myclasses.Classes()[$index()-1].FullName())) -->
    <p style="font-weight: bold; font-size:16px" data-bind= "text: getTerm(FullName())"></p>
    <!-- /ko -->
 <!-- /ko -->

正如你所看到的,如果前一个学期不同,我试图做的就是循环打印学期的阵列;但是只显示的是   &#34; W13&​​#34;而不是&#34; W14&#34;同样。

2 个答案:

答案 0 :(得分:2)

正如Patrick Steele所说,如果它是可观察的,你需要在FullName添加括号。

但这是另一个问题。在第一次检查中,您将$index()0进行比较,这似乎没问题。

问题在于您的第二次检查,您与"0"而不是0进行比较,当您使用!==时,比较将始终为真。

所以它在第一个循环中失败,因为在检查之后,您尝试访问项目编号$index()-1$index()返回0表示您正尝试访问项目编号-1!< / p>

替换

<!-- ko if: $index() !== "0" -->

使用

<!-- ko if: $index() !== 0 -->

答案 1 :(得分:0)

在比较中,尝试更改:

getTerm($parent.myclasses.Classes()[$index()-1].FullName)

为:

getTerm($parent.myclasses.Classes()[$index()-1].FullName())

您需要将括号添加到FullName,以便调用observable来获取值。你在左侧做了但在右边错过了它。