2017-08-31 68 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; 
     } 
    } 

如果我縮短陣列只是一個價值,那麼它的作品。否則,當使用數組中的任何值時,它將返回「NOMATCH」。任何幫助,將不勝感激!

謝謝 - 馬特

+0

請在片段中提供msg的對象數組。 –

+0

在'var len'中存儲/緩存'list.length'的目的是什麼? – Dai

回答

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

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"; 
} 
相關問題