2017-11-21 12 views
0

문자열의 배열에 하위 문자열이 포함되어 있는지 확인할 수 있습니까? 배열에 완전한 문자열 일치 ($ .inArray, arr.includes, arr.indexOf 등 사용)가 있는지 찾는 방법을 알고 있지만 문자열 배열에 일치하지 않습니다 (적어도 나를 위해).배열에 부분 문자열이 있는지 어떻게 확인할 수 있습니까?

나는 다음과 같은 옵션이있는 <select multiple> 요소가있는 경우 :

positive (selected) 
positron (selected) 
negative 
negatron 

어떻게 내 여러 옵션 배열이 문자열 pos, 모두 positvepositron이 선택에 있던 것을 나타 내기 위해이 포함되어 있는지 여부를 수있는 일을?

특정 선택을했는지 여부에 따라 사용자에게 몇 가지 추가 질문을 제시 할 수는 있지만 다양한 문자열을 처리하기 위해 if/then 문을 작성하고 싶지는 않습니다. 배열 요소는

var testData = ['positive', 'negative'] 
 

 
testData.forEach(function(item) { 
 
    if (item.indexOf('pos') !== -1) { 
 
    console.log('Hava data') 
 
    } 
 
})

답변

0

Array.prototype이 당신의 목적을 위해 매우 유용한 .filter 기능이 하위 문자열이 포함 된 경우

+0

이것은 제 논리와 작동합니다. 감사합니다 – user1837608

+0

한 번 더 질문, 괜찮습니다. 어떻게하면 array.filter를'if' 조건에 포함시킬 수 있습니까? 의미, {if (arr.filter (?? indexOf ('substr'))> -1) {// do logic} – user1837608

+0

OP로 돌아갑니다. * any * match를 원하면 비교할 단일 값을 반환하는'.reduce'를 사용할 수 있습니다 ('[]'가능). 당신이 ** ** 모든 **을 원한다면 그 대답을 내 대답의 결과와 비교하십시오. –

0

당신은 확인 indexOf를 사용할 수 있습니다.

const arr = ['positive', 'positron', 'negative', 'negatron']; 
 

 
function findMatches() { 
 
    let searchVal = document.getElementById('test').value; 
 
    let res = arr.filter(el => el.indexOf(searchVal) > -1); 
 
    document.getElementById('result').innerHTML = res.join(', '); 
 
}
<input type="text" id="test" /> 
 
<button type="button" onclick="findMatches()">Find</button> 
 
<br /> Array: ['positive', 'positron', 'negative', 'negatron']<br /> 
 
<span id="result"></span>
그리고 필터링 된 배열로 확장 논리를 적용 할 수 있습니다.

+0

좋아,하지만 먼저 각 배열을 반복하므로 각 배열 요소는'indexOf'로 테스트됩니다. 알 겠어. 'forEach' 단계없이 부분 문자열을위한 배열을 직접 질의하는 것이 가능합니까? – user1837608

+0

@ user1837608 요소가 하나뿐이라면'Array.prototype.find()'를보고, 그렇지 않으면 Array.prototype.filter()와 함께 Alex의 버전을 사용하게 될 것입니다. – Andreas