【问题标题】:indexOf to Check for Irregular Combo Entries Not Working?indexOf 检查不规则的组合条目不起作用?
【发布时间】:2018-07-31 16:01:00
【问题描述】:

我有以下 JavaScript 来检查组合条目:

var proteins = [
    "charred sirloin steak", 
    "roasted salmon", 
    "grilled chicken", 
    "grilled salmon", 
    "jerk chicken",
    "miami ribs", 
    "charred steak", 
    "tandoori chicken supreme"
];

var sides = [
    "israeli couscous salad",
    "kale caesar", 
    "field o greens",
    "grilled broccoli",
    "greek salad", 
    "coconut curry quinoa salad",
    "vegetable egg fried rice",
    "general tao brussel sprouts",
    "tokyo slaw",
    "mac cheese",
    "potato salad"
];

var comboEntries = document.querySelectorAll('.combo-display .combo-item');
for (var i = 0; i < comboEntries.length; i++) {
  if (proteins.indexOf(comboEntries[i].innerText) == -1 || sides.indexOf(comboEntries[i].innerText) == -1) {
    comboEntries[i].style.color = "orangered";
    console.log(comboEntries[i].innerText + " is not a regular combo item.");
  }
}

但是,这会将所有comboEntries 输出为不规则项。如果我将条件反转为!= -1,我可以看到它正常工作,突出显示常规项目,同时排除不规则项目。

我在这里做错了什么?这一定是我没能认出的简单事情。

已编辑:抱歉,我之前没有包含 HTML,因为这是生成内容的在线厨房显示屏的一部分。这是一个例子:

<div class="combo-display">
<p><strong>Protein 1:</strong> <span id="protein-1" class="combo-item">Custom item</span></p><div class="item-count"> x <span>1</span></div>
<p><strong>Protein 2:</strong> <span id="protein-2" class="combo-item">Custom item</span></p><div class="item-count"> x <span>1</span></div>
<p><strong>Protein 3:</strong> <span id="protein-3" class="combo-item">grilled chicken</span></p><div class="item-count"> x <span class="grilled-chicken-counter">1</span></div>
<p><strong>Side 1:</strong> <span id="side-1" class="combo-item">Custom item</span></p><div class="item-count"> x <span>1</span></div>
<p><strong>Side 2:</strong> <span id="side-2" class="combo-item">kale caesar</span></p><div class="item-count"> x <span class="kale-caesar-counter">1</span></div>
<p><strong>Side 3:</strong> <span id="side-3" class="combo-item">field o greens</span></p><div class="item-count"> x <span class="field-o-greens-counter">1</span></div>
</div>

所以custom item应该被高亮为不规则项

【问题讨论】:

  • HTML 代码在哪里?
  • 你能贴html代码吗
  • 不要使用||试试&amp;&amp;
  • @JM-AGMS 是的,行得通!这总是我错过的简单事情。

标签: javascript arrays for-loop indexof


【解决方案1】:

虽然您的问题由于缺少 HTML 代码而不清楚,但如果我没有错,那么您正在尝试 highlight 既不在 proteins 中的 value 也不在在sides

为此,您应该在您的if condition 中使用&amp;&amp;

这是一个有效的 sn-p:

var proteins = [
    "charred sirloin steak", 
    "roasted salmon", 
    "grilled chicken", 
    "grilled salmon", 
    "jerk chicken",
    "miami ribs", 
    "charred steak", 
    "tandoori chicken supreme"
];

var sides = [
    "israeli couscous salad",
    "kale caesar", 
    "field o greens",
    "grilled broccoli",
    "greek salad", 
    "coconut curry quinoa salad",
    "vegetable egg fried rice",
    "general tao brussel sprouts",
    "tokyo slaw",
    "mac cheese",
    "potato salad"
];

var comboEntries = document.querySelectorAll('.combo-display .combo-item');
for (var i = 0; i < comboEntries.length; i++) {
  if (proteins.indexOf(comboEntries[i].innerText) == -1 && sides.indexOf(comboEntries[i].innerText) == -1) {
    comboEntries[i].style.color = "orangered";
    console.log(comboEntries[i].innerText + " is not a regular combo item.");
    }
  }
<div class="combo-display">
  <div class="combo-item">
   israeli couscous salad
  </div>
  <div class="combo-item">
   vegetable egg fried rice
  </div>
  <div class="combo-item">
   vegetable egg fried rice1
  </div>
  <div class="combo-item">
   roasted salmon
  </div>
</div>

【讨论】:

  • 这行得通!不知道为什么我没有尝试将OR 条件更改为AND 这样简单的事情。谢谢!
  • ..它发生了:)
猜你喜欢
  • 2017-10-27
  • 2016-08-24
  • 1970-01-01
  • 2016-06-15
  • 2019-10-02
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多