2017-08-31 4 views
0

の値に文字列の値と一致することができません:私は次のコードでテストしてきたし、それが期待通りに機能していないように見えます配列

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; 
     } 
    } 

私はちょうど1に配列を短くした場合それはうまくいく。それ以外の場合は、配列内の値を使用するときに "NOMATCH"を返します。これについての助けがあれば、大歓迎です!

ありがとうございました - マット

+0

あなたのスニペットにmsgの配列も指定してください。 –

+0

'var len'に' list.length'を格納/キャッシュする目的は何ですか? – Dai

答えて

1

を次の3つの異なる要素を反復処理し、オブジェクト配列の単一のメンバーにそれらを比較しています。相違が見つかった場合、ループを壊し、3つのメンバーが異なるために差異が常に検出されます。

おそらく一致が見つかり、一致が見つからない場合

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

obr41は、単一の値であり、リストは3つの異なる値が含まれていない場合は壊れるしたかったです。つまり、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"; 
} 
関連する問題