我已使用以下代码进行测试,但似乎没有按预期运行:
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;使用数组中的任何值时。任何有关这方面的帮助将不胜感激!
谢谢 - 马特
答案 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";
}