Сортировка выпадающего списка с помощью JavaScript

Вы можете создать идентификатор для последовательных групп 1 с помощью .shift + .cumsum:

gps = s.ne(s.shift(1)).where(s.astype(bool)).cumsum()

. Затем вы можете получить последний индекс для каждой группы:

[ 111]

Просмотрите список всех индексов с помощью np.hstack

import numpy as np

np.hstack(np.arange(x+1, x+7, 1) for x in idx)
#array([ 6,  7,  8,  9, 10, 11, 19, 20, 21, 22, 23, 24])

И установите для этих индексов значение 1 во второй серии:

s2[np.hstack(np.arange(x+1, x+7, 1) for x in idx)] = 1

s2.ravel()
# array([0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 0., 0., 0., 0., 0.,..

Обновление с вашего Комментарий: Предполагая, что у вас есть Series s с индексами datetimes и другой Series s2, который имеет те же индексы, но все значения равны 0 и имеют частоту MonthStart, вы можете продолжить в похожая мода:

s = pd.Series([0,0,0,0,0,0,0,0,0,1,1]*5, index=pd.date_range('2010-01-01', freq='MS', periods=55))
s2 = s*0

gps = s.ne(s.shift(1)).where(s.astype(bool)).cumsum()
idx = s[::-1].groupby(gps).idxmax()

#1.0   2010-11-01
#2.0   2011-10-01
#3.0   2012-09-01
#4.0   2013-08-01
#5.0   2014-07-01
#dtype: datetime64[ns]

to_one = np.hstack(pd.date_range(start=x+pd.offsets.DateOffset(months=1), freq='MS', periods=6) for x in idx)

s2[s2.index.isin(to_one)]= 1
# I check .isin in case the indices extend beyond the indices in s2
19
задан dsolimano 24 February 2010 в 14:36
поделиться

3 ответа

Вы могли использовать jQuery и что-то вроде этого:

$("#id").html($("#id option").sort(function (a, b) {
    return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))

, Но, вероятно, лучше спросить, почему и что Вы пытаетесь выполнить.

49
ответ дан 30 November 2019 в 02:06
поделиться
<select id="foo" size="10">
  <option value="3">three</option>
  <option value="1">one</option>
  <option value="0">zero</option>
  <option value="2">two</option>
</select>
<script>
  // WARN: won't handle OPTGROUPs!
  var sel = document.getElementById('foo');
  // convert OPTIONs NodeList to an Array
  // - keep in mind that we're using the original OPTION objects
  var ary = (function(nl) {
    var a = [];
    for (var i = 0, len = nl.length; i < len; i++)
      a.push(nl.item(i));
    return a;
  })(sel.options);
  // sort OPTIONs Array
  ary.sort(function(a,b){
    // sort by "value"? (numeric comparison)
    // NOTE: please remember what ".value" means for OPTION objects
    return a.value - b.value;
    // or by "label"? (lexicographic comparison) - case sensitive
    //return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;
    // or by "label"? (lexicographic comparison) - case insensitive
    //var aText = a.text.toLowerCase();
    //var bText = b.text.toLowerCase();
    //return aText < bText ? -1 : aText > bText ? 1 : 0;
  });
  // remove all OPTIONs from SELECT (don't worry, the original
  // OPTION objects are still referenced in "ary") ;-)
  for (var i = 0, len = ary.length; i < len; i++)
    sel.remove(ary[i].index);
  // (re)add re-ordered OPTIONs to SELECT
  for (var i = 0, len = ary.length; i < len; i++)
    sel.add(ary[i], null);
</script>
7
ответ дан 30 November 2019 в 02:06
поделиться

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

3
ответ дан 30 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

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