Сортировка списка на основе пользовательского ввода на веб-странице

Для Eclipse работало следующее выражение:

Foo

jadajada Bar "

Регулярное выражение:

Foo[\S\s]{1,10}.*Bar*
0
задан Avery Doofenshmirtz Green 13 July 2018 в 19:22
поделиться

1 ответ

Все, что вы делаете в javascript, - это как-то async (кроме promt), поэтому вам просто нужно ждать пользователя, нажимающего один из div. Для этого мы просто создаем Promise, которая разрешается, когда событие click происходит на определенном элементе:

function wasClicked(el) {
  return new Promise((resolve) => {
    el.addEventListener("click", function handler() {
        el.removeEventListener("click", handler);
        resolve(el);
    });
  });
}

Затем вы можете изменить свое сравнение на:

static async function compare(a, b) { // <- should be static
  console.log("comparing " + a.name + " to " + b.name);
  a.set1();
  b.set2();
  console.log("after display");

  const pic1 = document.getElementById("pic1");
  const pic2 = document.getElementById("pic2");

  const choice = await Promise.race(wasClicked(pick), wasClicked(pic2));
 return choice === pic1 ? 1 : -1;
}

Теперь мы только нужен способ сортировки массива asynchronoulsy, но это довольно просто:

 async function asyncSort(array, comparator) {
   for(let i = 0; i < array.length - 1; i++) {
     if(await comparator(array[i], array[i + 1]) < 0) {
        ([array[i], array[i + 1]] = [[array[i + 1], array[i]]);
        i -= 2;
     }
   }
}

Итак, теперь вы можете сделать:

asyncSort(someArray, Character.compare);

PS: классы должны по договоренности просто содержат методы, которые являются «признаками» класса, например Character.speak(), ни set1, ни set2 не делают этого так, чтобы они не были методами Character

0
ответ дан Jonas Wilms 17 August 2018 в 12:12
поделиться
  • 1
    Благодаря! После некоторого чтения о том, как работает Promises, я смог это сделать и работать! Что касается класса, это соглашение javascript? Потому что это не так, как обычно я вижу классы, но я редко вижу классы, используемые вообще в javascript ... – Avery Doofenshmirtz Green 25 July 2018 в 23:13
  • 2
    @avery это скорее общее соглашение ООП – Jonas Wilms 26 July 2018 в 08:00
Другие вопросы по тегам:

Похожие вопросы: