@newaitix

Сортировка городов в масиве?

'Бердичев','Великая Чернетчина','Геническ','Гнездычев','Черкассы'

Когда я ищу "че" то логичней было бы получить такой результат:
'Черкассы','Бердичев','Великая Чернетчина','Геническ','Гнездычев'

Но indexOf тупой и не понимает этого. Как задать приоритет с начала строки ?
Чем ближе к началу строки найдено совпадение тем приоритетней это совпадение.
  • Вопрос задан
  • 131 просмотр
Решения вопроса 2
dom1n1k
@dom1n1k
Что-то примерно в таком духе.
Разумеется, код демонстрационный, не production-ready.
const towns = [
	'Бердичев',
	'Великая Чернетчина',
	'Геническ',
	'Гнездычев',
	'Черкассы'
];
const query = 'че';

let result = towns
	.map(town => ({
		name: town,
		index: town.toLowerCase().indexOf(query),
	}))
	.filter(town => town.index >= -1)
	.sort((a, b) => a.index - b.index)
	.map(town => town.name);
Ответ написан
hahenty
@hahenty
('•')
Вот так неуспел
var goroda = ['Бердичев','Великая Чернетчина','Геническ','Гнездычев','Черкассы'];

function sortirovka(a, m) {
  a = a.toLowerCase();
  return m.slice(0).sort( (name1, name2) => {
    let i1 = name1.toLowerCase().indexOf( a );
    let i2 = name2.toLowerCase().indexOf( a );
    if( i1 < 0 ) return 1;
    if( i2 < 0 ) return -1;
    return Math.sign( i1 - i2 );
  } );
}

sortirovka( 'че', goroda );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы