【发布时间】:2016-10-06 21:40:52
【问题描述】:
我有一系列货币["GBP", "EUR", "NOK", "DKK", "SKE", "USD", "SEK", "BGN"]。如果货币存在于数组的开头,我想通过移动预定义列表来订购它。预定义列表为['EUR', 'USD', 'DKK', 'SKE', 'NOK', 'GBP']。
所以在这种情况下它应该返回['EUR', 'USD', 'DKK', 'SKE', 'NOK', 'GBP', 'SEK', BGN']。
但如果未过滤的数组不包含预定义列表中的所有值,它也应该正确排序。例如:["GBP", "EUR", "NOK", "LTU", "ZGN"] 应该看起来像 ['EUR', 'NOK', 'GBP', 'LTU', 'ZGN'
我试图使用这个函数对其进行排序:
list.sort(c => ['EUR', 'USD', 'DKK', 'SKE', 'NOK', 'GBP'].indexOf(c))
但它将所有预定义的货币放在列表的末尾,而不是在 from。也许有更好的方法来做到这一点?
【问题讨论】:
-
.sort()的回调接受参数 - 第一个和第二个比较器。您可以使用list.sort(( c, d ) => [...].indexOf(c) > [...].indexOf(d) ? 1 : [...].indexOf(c) < [...].indexOf(d) ? -1 : 0);做同样的事情,但是,根据需要调整>和<标志。
标签: javascript arrays sorting ecmascript-6