아래 함수에서 문자열이 포함 된 배열 (인시던트)을 반복합니다. 문자열은 다른 웹 응용 프로그램에서 파기 된 사건 (범죄 또는 사고)을 설명하고 있으며, 내가하고있는 일은 다른 범죄/사고를 나누어 계산하여 객체에 넣는 것입니다 (INCIDENT_MATCHES).정규 표현식과 일치하는 항목을 하나만 가져 오기
그러나 일부 텍스트 문자열에는 내가 검색하는 여러 키워드 (예 : '총격'및 '배터리')가 포함될 수 있지만 원하지 않는 텍스트 문자열이있을 수 있습니다. 대신 나는 단지 처음 발견 된 단어를 계산하기를 원합니다. 더 많은 키워드가 발견되면 무시해야합니다.
어떻게이 작업을 수행 할 수 있습니까?
var INCIDENT_MATCHES = {
battery: /\w*(bråk)\w*|överfall|slagsmål|slogs|misshandel|misshandlad|\w*(tjuv)\w*/ig,
burglaries: /snattade|snattare|snatta|inbrott|bestulen|stöld|\w*(tjuv)\w*/ig,
robberies: /\w*(rån)\w*|personrån|\w*(ryckning)\w*|väskryckt*/ig,
gunfire: /skottlossning|skjuten|sköt/ig,
drugs: /narkotikabrott/ig,
vandalism: /skadegörelse|klotter|\w*(klottra)\w*/ig,
trafficAccidents: /(trafik|bil)olycka|(trafik|bil)olyckor|\w*(personbil)\w*|singelolycka|kollision|\w*(kollidera)\w*|påkörd|trafik|smitningsolycka/ig,
};
var j = 0,
incidentCounts = {},
incidentTypes = Object.keys(INCIDENT_MATCHES);
incidents.forEach(function(incident) {
matchFound = false;
incidentTypes.forEach(function(type) {
if(typeof incidentCounts[type] === 'undefined') {
incidentCounts[type] = 0;
}
var matchFound = incident.match(INCIDENT_MATCHES[type]);
if(matchFound){
matchFound = true;
incidentCounts[type] += 1;
}
});
j++;
});
. 일치하는 문자열이 발견되면 일치하는 문자열이 다시 검색됩니다. – holyredbeard
@holyredbeard 아, 외부 "루프"('.each()')에 대해 또 다른'return false; '가 필요할 수도 있습니다 - 응답을 업데이트 할 것입니다. – Pointy
당신의 솔루션을 실험 해본 결과 두 번째 'forEach'문을 'every'로 변경하고 if (matchFound) 내부에 'return false'를 넣은 다음 else else {return true;}를 쓰는 것이 트릭을 수행한다는 것을 알았습니다! – holyredbeard