javascript - 使用数组对项目进行排序

标签 javascript jquery

您好,我想对链接列表进行排序以匹配数组顺序:

List: 

<a href="" data-value="10">10</a>
<a href="" data-value="6">6</a>
<a href="" data-value="8">8</a>
...
<a href="" data-value="m">M</a>
<a href="" data-value="s">S</a>

Array for Ordering:

['6', '8', '10', '12', '14', 'xs', 's', 'm', 'l', 'xl', 'xxl']

我正在使用以下内容对文本选项进行排序,但不是数字选项:

(function () {
    var order = ['6', '8', '10', '12', '14', 'xs', 's', 'm', 'l', 'xl', 'xxl'];
    var $wrapper = $('.size-filter');
    $wrapper.find('a').sort(function (a, b) {
      var aSize = $(a).data('value'), bSize = $(b).data('value');
      return order.indexOf(aSize) - order.indexOf(bSize);
    }).appendTo($wrapper);
  })();

我如何调整或重写此排序函数,以便它对文本和数字大小选项进行排序?

最佳答案

将链接存储在 Map 中,以它们的 data-value 属性为键,然后是 map链接的 order 数组

const links = [...document.querySelectorAll('a[data-value]')].reduce((map, link) =>
    map.set(link.dataset.value, link), new Map())

const orderedLinks = order.filter(k => links.has(k)).map(k => links.get(k))

然后您可以使用 jQuery 将这些链接附加到另一个元素

$('some-element-selector').append(orderedLinks)

请注意,我已将 order 数组过滤为实际存在链接的数组。

关于javascript - 使用数组对项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997579/

相关文章:

javascript - jQuery 选择 ID 不等于的输入类型文本

javascript - 使用 jQuery 上传 WordPress ajax 文件

javascript - 将ejs转换为jade?

javascript - 使用 D3 JS 绘制条形图

javascript - 为什么 AJAX 不能与 for 循环一起使用

javascript - Sum Array 推送值,在 0 javascript 之前

jquery - 创建一个 16 :9 aspect ratio iframe based on browser size (percentage)

javascript - jQuery - 按 id 按降序排列元素的按钮

javascript - HTML CSS如何给元素添加渐变透明度

javascript - jwplayer seek() 和 onTime() 播放视频片段