Javascript сортировать массив на основе определенной строки

Этот код отключит кнопку «Назад» для современных браузеров, которые поддерживают API истории HTML5. При нормальных обстоятельствах нажатие кнопки «Назад» возвращается на один шаг назад на предыдущую страницу. Если вы используете history.pushState (), вы начинаете добавлять дополнительные подэтапы на текущую страницу. Как это работает, если вы будете использовать history.pushState () три раза, тогда начните нажимать кнопку «Назад», первые три раза он будет перемещаться назад на этих подэтапах, а затем в четвертый раз он вернется к на предыдущей странице.

Если вы комбинируете это поведение с прослушивателем событий в событии popstate, вы можете по существу создать бесконечный цикл под-состояний. Таким образом, вы загружаете страницу, нажимаете суб-состояние, затем нажимаете кнопку «Назад», которая выдает вспомогательное состояние, а также толкает другую, поэтому, если вы снова нажмете кнопку «Назад», она никогда не выйдет из под-состояний, чтобы нажать , Если вы считаете, что необходимо отключить кнопку «Назад», это приведет вас туда.

history.pushState(null, null, 'no-back-button');
window.addEventListener('popstate', function(event) {
  history.pushState(null, null, 'no-back-button');
});
1
задан joelgullander 4 March 2019 в 23:08
поделиться

2 ответа

Если вы хотите применить другой тип упорядочения (ascending или descending) к остальным элементам и иметь элементы с квалификатором, равным oip вверху, то вы можете сделать что-то вроде этого (В пример, в порядке возрастания применяется к остальным элементам):

const input = [
 {qualifier: 'abc', id: "1"},
 {qualifier: 'oip', id: "2"},
 {qualifier: 'def', id: "3"},
 {qualifier: 'oip', id: "4"},
];

input.sort(({qualifier: q1}, {qualifier: q2}) =>
{      
    if (q1 === 'oip' && q2 === 'oip')
        return 0;
    else if (q1 === 'oip')
        return -1;
    else if (q2 === 'oip')
        return 1;
    else
        return q1.localeCompare(q2);
});

console.log(input);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

0
ответ дан Shidersz 4 March 2019 в 23:08
поделиться

Это должно сделать:

x.sort((a,b) => a === 'oip'? 1 : -1)

Вы можете узнать больше о сортировать здесь .

Если a и b - это два сравниваемых элемента, то:

  • Если compareFunction (a, b) меньше 0, сортируйте a по индексу ниже b (то есть a на первом месте).
  • Если compareFunction (a, b) возвращает 0, оставьте a и b неизменными по отношению друг к другу, но отсортированные по всем различным элементам. Примечание: стандарт ECMAscript не гарантирует такого поведения, и поэтому не все браузеры (например, версии Mozilla, датируемые как минимум 2003 годом) соблюдают это.
  • Если compareFunction (a, b) больше 0, сортируйте b по индексу, меньшему, чем a (т. Е. B стоит первым).
  • compareFunction (a, b) всегда должна возвращать одно и то же значение, если задана определенная пара элементов a и b в качестве двух аргументов. Если возвращаются противоречивые результаты, порядок сортировки не определен.

Этот ответ работал для примера, изложенного OP. Однако, чтобы быть более полным (спасибо за указание на это @Pointy ), вот полная версия:

x = [
 {qualifier: 'abc'},
 {qualifier: 'oip'},
 {qualifier: 'def'},
 {qualifier: 'gij'},
 {qualifier: 'oip'},
];

y = x.sort((a, b) => {
  if (a.qualifier === b.qualifier && a.qualifier === 'oip') {
    return 0;
  } else if (a.qualifier === 'oip') {
    return -1;
  } else if (b.qualifier === 'oip') {
    return 1;
  }else {
    return a.qualifier > b.qualifier? 1 : -1;
  }
});
0
ответ дан Ibu 4 March 2019 в 23:08
поделиться
Другие вопросы по тегам:

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