сортировка по вхождению слов алфавита в слово (релевантная?)
Здравствуйте! Есть большой словарь (но слова могут содержать цифры и вообще любые символы), нужно из него доставать слова, которые совпадают с введённым словом.
В лоб такое решение сделал let words = [] //большой словарь let value; //искомое слово let result = words.filter(i => i.word.toLowerCase().indexOf(value.toLowerCase()) >=0 ); Допустим, я отфильтровал слова по букве "М", тогда в выборку попадут слова которые не только на эту букву начинаются, но и содержат её на других позициях. Тогда я сортирую такой массив result.sort((a, b)=>{ let min = Math.min(a.word.length, b.word.length); for(let i = 0; i < min.length; i++) { if(a.word[i] > b.word[i]) { return 1; } if(a.word[i] < b.word[i]) { return -1; } } return 0; }); Но это не дало результата, всё ещё лезут слова без буквы "М" на первой позиции. Что я упускаю? ((( |
innowed,
может сразу let result = words.filter(i => i.word.toLowerCase().indexOf(value.toLowerCase()) ==0 ); |
хм, что-то получилось))
let rawList = words.filter( i => i.word.toLowerCase().indexOf(value.toLowerCase()) == 0 ); var map = rawList.map(function(e, i) { return { index: i, value: e.word.toLowerCase() }; }); map.sort(function(a, b) { if(a.value.indexOf('.') != -1) return 1; //точка поднимает слово на самый верх return +(a.value > b.value) || +(a.value === b.value) - 1; }); var result = map.map(function(e) { return rawList[e.index]; }); осталось добавить монитор |
Часовой пояс GMT +3, время: 20:19. |