Шаблоны и больше для чистого и легкого кода gui

В таком случае, когда вы хотите сортировать по нескольким уровням, вам нужно отсортировать их в порядке убывания важности внутри вашей функции сортировки.

В этом случае мы регулярно сортируем в тех случаях, когда оба элемента находятся в или не в массиве сортировки.

var itemsArray = [
    { id: 8, name: 'o' },
    { id: 7, name: 'g' },
    { id: 6, name: 'a' },
    { id: 5, name: 'k' },
    { id: 4, name: 'c' }
];
var sortArray = [4, 5];
var sortedItemsArray = itemsArray.sort(function (a, b) {
    if (sortArray.includes(a.id) == sortArray.includes(b.id)) { //both or neither are in sort array
        return b.id - a.id;
    }
    else if (sortArray.includes(a.id)) { //only a in sort array
        return -1;
    }
    else { //only b in sort array
        return 1;
    }
});
console.log(sortedItemsArray);

Приведенный выше фрагмент кода можно расширить несколькими способами, но популярный подход заключается в разделении его на несколько этапов сортировки.

var itemsArray = [
    { id: 8, name: 'o' },
    { id: 7, name: 'g' },
    { id: 6, name: 'a' },
    { id: 5, name: 'k' },
    { id: 4, name: 'c' }
];
var sortArray = [4, 5];
function sortId(a, b) {
    return b.id - a.id;
}
function sortIdByList(a, b) {
    if (sortArray.includes(a.id)) {
        return -1;
    }
    if (sortArray.includes(b.id)) {
        return 1;
    }
    return 0;
}
//TEST
var sortedItemsArray = itemsArray
    .sort(sortId)
    .sort(sortIdByList);
console.log(sortedItemsArray);

Эту схему проще поддерживать, поскольку каждый шаг четко обозначен, а функции можно повторно использовать в других случаях сортировки. [1114 ]

Единственный недостаток этого паттерна заключается в том, что в конечном итоге вы повторяете список несколько раз, увеличивая время сортировки. Обычно это не проблема, но в очень больших списках это может быть важно.

Сортировать только по индексу массива

Поскольку комментарии указывают, что я неправильно прочитал вопрос, поэтому мои предыдущие два фрагмента сортировки не обязательно дают желаемый результат.

Эта версия сортирует только по индексу в массиве сортировки:

var itemsArray = [
    { id: 8, name: 'o' },
    { id: 7, name: 'g' },
    { id: 6, name: 'a' },
    { id: 5, name: 'k' },
    { id: 4, name: 'c' }
];
var sortArray = [4, 5];
//TEST
var sortedItemsArray = itemsArray
    .sort(function (a, b) {
    //Calculate index value of a
    var A = sortArray.indexOf(a.id);
    if (A == -1) {
        A = sortArray.length;
    }
    //Calculate index value of b
    var B = sortArray.indexOf(b.id);
    if (B == -1) {
        B = sortArray.length;
    }
    //Return comparison
    return A - B;
});
console.log(sortedItemsArray);

7
задан maerch 3 January 2009 в 18:25
поделиться

3 ответа

Martin Fowler написал интересную статью об этой теме: Архитектура GUI

10
ответ дан 6 December 2019 в 19:43
поделиться

Когда я кодирую GUI в GWT, мне нравится создавать Виджеты, которые делают просто некоторую небольшую задачу. Таким образом, становится намного более ясно, когда Вы затем комбинируете те виджеты в заключительном представлении. С другой стороны, можно получить путаницу виджета на всем протяжении. Так попытайтесь сбалансировать то, что может войти в новый виджет (чтобы использоваться на многих местах) и что в представлении.

3
ответ дан 6 December 2019 в 19:43
поделиться

Больше походит на очень общую проблему программирования затем просто связанный GUI. Почему Вы чувствуете, что это только происходит с Вашим кодом GUI? Состоит в том Ваша единственная проблема, что Ваши компоненты представления чувствуют себя нарушенными методами считывания/методами set и constsructors со многими параметрами?

Не очень можно сделать о конструкторах со многими параметрами кроме проверки, что все параметры на самом деле необходимы. Вы могли бы хотеть взглянуть на шаблон Разработчика btw. Это, вероятно, привычка сокращает количество параметров, но это - хорошая практика для ограничения использования нового ключевого слова.

Вероятно, не ответ Вы искали, но видите, можно ли быть более конкретны относительно проблемы и почему Вы чувствуете, что это только происходит в Вашем коде GUI.

0
ответ дан 6 December 2019 в 19:43
поделиться
Другие вопросы по тегам:

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