无法将字符串中的值与数组中的值匹配

时间:2017-08-31 16:39:13

标签: javascript arrays

我已使用以下代码进行测试,但似乎没有按预期运行:

var obr41 = msg['OBR']['OBR.4']['OBR.4.1'].toString();
var list = ["THIS","THAT","OTHER"];

    for (var i = 0, len = list.length; i < len; ++i)
    {
        if (obr41 !== list[i])

         {
            msg['OBR']['OBR.4']['OBR.4.1'] = "NOMATCH";
            break;
         }
    }

如果我将数组缩短为一个值,那么它可以工作。否则,它将返回&#34; NOMATCH&#34;使用数组中的任何值时。任何有关这方面的帮助将不胜感激!

谢谢 - 马特

2 个答案:

答案 0 :(得分:1)

您正在迭代三个不同的元素,并将它们与一个对象数组的单个成员进行比较。如果找到差异,则会中断循环,并且总会找到差异,因为三个成员不同。

如果找到匹配项,您可能想要中断,如果找不到匹配项,则可能不会中断

var obr41 = msg['OBR']['OBR.4']['OBR.4.1'].toString();
var list = ["THIS","THAT","OTHER"];
var found = false;

for (var i = 0, len = list.length; i < len; ++i)
{
    if (obr41 === list[i])

     {
        found = true;
        break;
     }
}
if(!found) msg['OBR']['OBR.4']['OBR.4.1'] = "NOMATCH";

答案 1 :(得分:1)

obr41是单个值,该列表包含三个不同的值。这意味着您始终会在list中找到与obr41不匹配的商品。

我认为你想要的是设置一个变量,如果匹配,如果变量从未设置,则没有匹配。

var obr41 = msg['OBR']['OBR.4']['OBR.4.1'].toString();
var list = ["THIS","THAT","OTHER"];
var foundMatch = false;

for (var i = 0, len = list.length; i < len; ++i)
{
    if (obr41 !== list[i])
     {
        foundMatch = true;
        break;
     }
}

if (!foundMatch) {
  msg['OBR']['OBR.4']['OBR.4.1'] = "NOMATCH";
}

或者您可以使用.inludes()代替,这更干净。

var obr41 = msg['OBR']['OBR.4']['OBR.4.1'].toString();
var list = ["THIS","THAT","OTHER"];

if (!list.includes(obr41)) {
  msg['OBR']['OBR.4']['OBR.4.1'] = "NOMATCH";
}