cal*_*die 6 javascript arrays sorting jquery
这将在Javascript(jQuery)中实现,但我想这个方法可以用于任何语言.
我有一系列项目,我需要进行排序.但是,数组中的某些项必须保持在相同的位置(相同的索引).
有问题的数组是从<li>
元素列表构建的,我使用附加到列表项的.data()值作为要排序的值.
这方面最好的方法是什么?
<ul id="fruit">
<li class="stay">bananas</li>
<li>oranges</li>
<li>pears</li>
<li>apples</li>
<li class="stay">grapes</li>
<li>pineapples</li>
</ul>
<script type="text/javascript">
var sugarcontent = new Array('32','21','11','45','8','99');
$('#fruit li').each(function(i,e){
$(this).data('sugar',sugarcontent[i]);
})
</script>
Run Code Online (Sandbox Code Playgroud)
我希望列表按以下结果排序...
<ul id="fruit">
<li class="stay">bananas</li> <!-- score = 32 -->
<li>pineapples</li> <!-- score = 99 -->
<li>apples</li> <!-- score = 45 -->
<li>oranges</li> <!-- score = 21 -->
<li class="stay">grapes</li> <!-- score = 8 -->
<li>pears</li> <!-- score = 11 -->
</ul>
Run Code Online (Sandbox Code Playgroud)
谢谢!
算法是:
stay
合并stay
项目和已排序的项目
var sugarcontent = new Array(32, 21, 11, 45, 8, 99);
var items = $('#fruit li');
items.each(function (i) {
$(this).data('sugar', sugarcontent[i]);
// Show sugar amount in each item text - for debugging purposes
if ($(this).hasClass('stay'))
$(this).text("s " + $(this).text());
else
$(this).text(sugarcontent[i] + " " + $(this).text());
});
// Sort sortable items
var sorted = $(items).filter(':not(.stay)').sort(function (l, r) {
return $(l).data('sugar') - $(r).data('sugar');
});
// Merge stay items and sorted items
var result = [];
var sortedIndex = 0;
for (var i = 0; i < items.length; i++)
if (!$(items[i]).hasClass('stay')) {
result.push(sorted[sortedIndex]);
sortedIndex++;
}
else
result.push(items[i]);
// Show result
$('#fruit').append(result);
Run Code Online (Sandbox Code Playgroud)