JavaScript HackerRank: Джим и заказы – методы обработки заказов с примерами кода

Задача «Джим и заказы» на HackerRank заключается в определении порядка обработки заказов клиентов на основе их номеров заказов и времени подготовки. Каждый заказ обозначается номером заказа и временем приготовления. Цель — найти порядок, в котором должны обслуживаться клиенты, учитывая как номер заказа, так и время подготовки.

Вот пример решения на JavaScript с использованием различных методов:

  1. Сортировка массива объектов:
function jimOrders(orders) {
  // Add the order number and preparation time as properties to each order
  orders = orders.map((order, index) => ({ orderNumber: index + 1, preparationTime: order[0] + order[1] }));
  // Sort the orders based on the preparation time in ascending order
  orders.sort((a, b) => a.preparationTime - b.preparationTime);
  // Extract the order numbers in the sorted order
  const result = orders.map(order => order.orderNumber);
  return result;
}
// Example usage
const orders = [[8, 1], [4, 2], [5, 6], [3, 1], [4, 3]];
console.log(jimOrders(orders)); // Output: [4, 5, 1, 2, 3]
  1. Использование методов массива, таких как map, sortи reduce:
function jimOrders(orders) {
  const result = orders
    .map((order, index) => ({ orderNumber: index + 1, preparationTime: order[0] + order[1] }))
    .sort((a, b) => a.preparationTime - b.preparationTime)
    .reduce((acc, order) => {
      acc.push(order.orderNumber);
      return acc;
    }, []);
  return result;
}
// Example usage
const orders = [[8, 1], [4, 2], [5, 6], [3, 1], [4, 3]];
console.log(jimOrders(orders)); // Output: [4, 5, 1, 2, 3]
  1. Использование метода Array.from:
function jimOrders(orders) {
  const result = Array.from({ length: orders.length }, (_, index) => index + 1)
    .sort((a, b) => orders[a - 1][0] + orders[a - 1][1] - orders[b - 1][0] - orders[b - 1][1]);
  return result;
}
// Example usage
const orders = [[8, 1], [4, 2], [5, 6], [3, 1], [4, 3]];
console.log(jimOrders(orders)); // Output: [4, 5, 1, 2, 3]