如何使用 JavaScript 对字符串的选择框进行排序

By simon at 11 天前 • 0人收藏 • 7人看过

我正在尝试对一个 Select 选项数组进行排序,但是这些选项在字符串末尾包含一个数字。 那么,我怎样才能不仅按开头字母排序,而且按数字排序呢?

句子太长,请短一点

我修改了这个程序,并按字母顺序排序:

函数 sortSelect (selElem){ var tmpAry new Array () ; for (var i 0; i selelement.options.length; i + +){ tmpAry [ i ] new Array () ; tmpAry [ i ][0] selelement.options [ i ]。 [1] selelement.options [ i ]. { selelement.options.length 0){ selelement.options [0] null; } for (var i 0; i tmpAry.length; i +){ var op new Option (tmpAry [ i ][0] ,tmpAry [ i ][1]) ; selelement.options [ i ] op; } return; } sortSelect (document.querySelector ("# dueon")))

到目前为止,我得到的唯一结果是营业日-1个营业日-10个营业日-12个营业日-15个营业日-2..。

4 个回复 | 最后更新于 11 天前
11 天前   #1

如果有一致的分隔符(如" - "在你的例子中) ,你可以分割它,这样你就只剩下一个字符串和一个数字。

如果字符串是相同的,然后比较的数字。

如果字符串不相同,使用标准的排序逻辑。

创建一个可重用的排序函数,该函数接受一个选择元素 const sortselectotions (select){ let options select.options; let sortedOptions [ ... options ]。 Sort ((a,b){ / / / 比较 a 和 b a. text; / / 我们只关心文本,而不是 b. b. text; let aParts a.Split ("-") ; / / 将文本拆分为两部分:"-"let bParts b.Split ("-") ; / / 如果第一部分是相同的,我们将比较第二部分 / / 然而我们需要知道它们是字符串还是数字,如果(aParts [0] bParts [0] & & & amp; length 1 & bParts.length 1){ a aParts [1] ; b parts [1] ; / / Special sort cases / NUMBERS If (! Isnan (a) a Number (a) ; 如果(! 索引(a) ; 索引(a)选项[索引]选项[索引]选项[索引] ; } ; / / 获得"DueOn"选项,并使用我们的新函数 con排序它
句子太长,请短一点
11 天前   #2

你需要一个自定义的比较函数:

函数 sortSelect (selElem){ var tmpAry new Array () ; for (var i 0; i selelement.options.length; i + +){ tmpAry [ i ] new Array () ; tmpAry [ i ][0] selelement.options [ i ]。 [1] selelement.options [ i ]. 句子太长,请短一点
句子太长,请短一点
11 天前   #3

我使用基本的例子和使用排序的数组提供的 javascript 和您的要求是完全满足的,看看代码片段和运行它。

Var 选项['Business Day-15','Business Day-1','Business Day-12','Day of the Week Day-Friday','Business Day-2','Calendar Day-4','Business Day-10','Calendar Day-7','Calendar Day-9','Day of the Week Day-Wednesday-Wednesday','Calendar Day-5'] ; options options.sort () ; var select document.getellbyement('ttag selection') ; Option.foreach (value){ select.options [ selection.options.length ] new Option selections.})
选择 id'selecttag'选项值'0'-select-/ option / select
11 天前   #4

这是一个常见的要求,已经有一个排序算法为它建立:

本地公司(b,'en-u-kn-true') ;

这个函数返回-1、0或1,具体取决于A在... 之前B英文版(嗯)与数字排序规则(没错).Tmpary.sort ()期待这样一个函数,所以给它一:

Tmpary.sort ((a,b) a [0]. (b [0] ,'en-u-kn-true') ;

的元素Tmpary是数组本身,所以你需要[0]我们只比较课文。本地公司是一个 String 方法,而不是 Array 方法。

还有选项现场直播,所以如果你排序那个,网页选项将自动排序以及。 由于您已经在使用自定义排序函数,因此可以将文本内容从每一个选择然后直接进行分类。选项不是一个 Array,但是它是一个类似 Array 的数组排序排序和... 一起打电话:

函数 sortSelect (selElem){ ary.prototype.sort.call (selelement.options,(optionA,optionB) optionA.textcontent.localecompare (optionB.textcontent,'en-u-kn-true') ; } sortSelect (document.querySelector ("# dueon")) ;
句子太长,请短一点

登录后方可回帖

Loading...