JavaScript에서 영어와 스페인어 단어 비교

나는 single page web application 을 사용하여 React 작업을 해왔습니다. 한 기능은 JSON 콜롬비아 도시 목록을 사용합니다.

"colombiaCities": [
    {
      "city": "Bogotá",
      "lat": 4.6126,
      "lng": -74.0705,
      "country": "Colombia",
      "iso2": "CO",
      "adminName": "Distrito Capital",
      "capital": "primary",
      "population": 9464000,
      "populationProper": 7963000
    },
// ...515 other cities


사용자는 국가를 검색하여 세부 정보를 얻을 수 있습니다. 입력은 악센트 표시 없이 영어로 이루어집니다. 원하면 입력할 수 있지만 그렇게 하지 않기로 선택합니다. 그것은 그다지 국제적이지 않습니다.

이 사용자는 noaccent marks(때때로)로 정보를 가져오지 못합니다. 악센트가 없는 문자열을 위 개체의 악센트가 있는 문자열과 비교할 때(toLowerCase() 을 사용하여 대소문자를 같음) 문자별로 비교됩니다. aBogotaáBogotá에 맞설 때까지는 모든 것이 좋습니다. 그들은 이 단어들을 동등하게 비교할 방법이 필요합니다.

그리하여 내 검색이 시작되었습니다. 나는 normalize() method 을 처음 발견했습니다. 다음과 같습니다.

const str = 'ÁÉÍÓÚáéíóúâêîôûàèìòùÇç';
const parsed = str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
console.log(parsed)


Regular Expressions이 여전히 무서워서 다음 검색 결과로 이동했습니다. localeCompare() . 이것은 내 속도에 더 가까워 보였고 이미 필요한 비교를 수행하고 있습니다. 다음과 같습니다.

const enStr = 'Bogota'
const esStr = 'Bogotá'
enStr.localeCompare(esStr, 'es-CO', { sensitivity: 'base' })


사실 이전에 이 용어localeCompare()를 살펴보았습니다. 전체 텍스트 검색. 그것은 꽤 무거운 의무입니다. JavaScript에서 이것은 FlexSearch 과 같은 라이브러리 종속성 형태로 올 수 있습니다. 내가 당면한 겸손한 분류 작업에 비해 너무 부피가 큽니다.

단어 비교 및 ​​도시 정렬 기능으로 localeCompare()를 선택하겠습니다.

좋은 웹페이지 즐겨찾기