В соответствии с этой задачей Codewars мне нужно создать простую логику для отслеживания всех слов, которые появляются в строке.
ИНСТРУКЦИИ
Некоторые новые кассиры начали работать в вашем ресторане.
Они хорошо принимают заказы, но незнаете, как использовать слова с заглавной буквы или используйте пробел!
Все создаваемые ими заказы выглядят примерно так:
"milkshakepizzachickenfriescokeburgerpizzasandwichmilkshakepizza"
Персонал кухни угрожает броситьиз-за того, как трудно читать заказы.
Их предпочтение состоит в том, чтобы получать заказы в виде красивой чистой строки с пробелами и прописными буквами, например:
"Burger Fries Chicken Pizza Pizza Pizza PizzaSandwich Milkshake Milkshake Coke "
Персонал кухни ожидает, что элементы будут в том же порядке, в котором они отображаются в меню.
Элементы меню довольно простые, в названиях нет совпаденийиз предметов:
- бургер
- картофель фри
- курица
- пицца
- сэндвич
- луковые кольца
- Милкшаke
- Кокс
EDIT Следуя логике .match()
, я создал массив всех элементов, которыепоявляются на входе.Но я не знаю, какой самый быстрый способ сортировать их по порядку появления в исходной строке:
function getOrder(order) {
let menu = ['Burger', 'Fries', 'Chicken', 'Pizza', 'Sandwich', 'Onionrings', 'Milkshake', 'Coke'];
let finalOrder = order.split(/(burger|fries|chicken|pizza|sandwich|onionrings|milkshake|coke)/i);
finalOrder = finalOrder.filter((element) => element !== null || element !== "");
finalOrder = finalOrder.map((element) => element.charAt(0).toUpperCase() + element.slice(1));
finalOrder = finalOrder.sort((a, b) => {
if (menu.indexOf(a) > menu.indexOf(b)) {
return 1;
}
else {
return -1;
}
});
return finalOrder.join(" ").trim(/\s/);
}
console.log(getOrder("milkshakepizzachickenfriescokeburgerpizzasandwichmilkshakepizza"));