用Javascript对一个以特定字符串开头的数组进行排序
Sorting an array in Javascript starting with a specific string
我想从select中的一个选项开始,按字母顺序对数组进行排序。这是我的代码:
HTML
<select id="select">
<option>Apples</option>
<option>Oranges</option>
<option>Peaches</option>
<option>Pears</option>
</select>
<div id="fruits">
<ul>
<li>Apples</li>
<li>Peaches</li>
<li>Pears</li>
<li>Oranges</li>
</ul>
</div>
Javascript
document.getElementById('select').addEventListener('click', function() {
var index;
var fruit = ["Apples", "Oranges", "Pears", "Peaches"];
var listOutput = document.getElementById('fruits');
var text = "<ul>";
fruit.sort();
for (index = 0; index < fruit.length; index++) {
text += "<li>" + fruit[index] + "</li>";
}
text += "</ul>";
listOutput.innerHTML = text;
});
我已经能够按字母顺序对水果进行排序,但我希望能够根据所选的水果按字母顺序进行排序。例如,如果我在select中选择了Oranges,我希望水果按如下方式输出:
Oranges
Peaches
Pears
Apples
我想从所选选项开始按字母顺序循环数组,一旦所有字符串都被循环,从字母表的顶部开始,然后继续,直到所有字符串都输出
您可以使用
var fruit = ["Apples", "Oranges", "Pears", "Peaches"];
fruit.sort(function(a, b){
return // Ur Logic
})
请参阅http://www.javascriptkit.com/javatutors/arraysort2.shtml
有一些方法可以实现您想要的。让我们开始在点击函数之外定义一些变量,这样就不会在每次新点击时重复:
var listOutput = document.getElementById('fruits'),
select = document.getElementById('select'),
opts = select.querySelectorAll('option'),
len = opts.length,
fruit = [];
// populate fruit with the values of all options
for (var i = 0; i < len; i++) fruit.push(opts[i].value);
fruit.sort(); // sort fruit alphabetically
如果你必须支持不知道现代数组方法的旧浏览器:
select.addEventListener('click', function() {
var text = '<ul>',
idx = 0,
sel = this.selectedOptions[0].value; // get the selected value
for (; idx < len; idx++) if (fruit[idx] == sel) break; // get index of selected value
for (var i = idx; i < len; i++) { // get all items from selected to end
text += '<li>' + fruit[i] + '</li>';
}
for (var i = 0; i < idx; i++) { // get all items from first to selected
text += '<li>' + fruit[i] + '</li>';
}
listOutput.innerHTML = text + '<ul';
});
不用两个for循环打印项目,你可以用一个:
// get all items from selected to end, then from first to selected
for (var i = idx; i < len;) {
text += '<li>' + fruit[i] + '</li>';
if (++i == len && len != idx) i = 0, len = idx;
}
在这里找到演示。有了现代数组方法(在这里找到它们),写起来就不那么容易了:
var listOutput = document.getElementById('fruits'),
select = document.getElementById('select'),
opts = select.querySelectorAll('option'),
fruit = [].map.call(opts, function(opt) {return opt.value}).sort();
select.addEventListener('click', function() {
var idx = fruit.indexOf(this.selectedOptions[0].value),
arr = fruit.slice(idx).concat(fruit.slice(0, idx));
listOutput.innerHTML = arr.reduce(function(a, b) {
return a + '<li>' + b + '</li>'
}, '<ul>') + '</ul>';
});
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- Javascript中的多维数组排序索引问题
- 如何按日期对Javascript对象数组排序
- 数组排序后显示更改
- 当许多元素相等时,Javascript数组排序无法正常工作
- Javascript数组排序速度受字符串长度的影响
- 按唯一键将对象数组排序为数组
- 以 js 为单位的数组排序
- js 数组排序无法正常工作
- 数组排序.论点从何而来
- 不需要的数组排序
- 数组排序不正确/不可预测,使用 indexOf 时
- Javascript将数组排序到树中
- 随后的多维数组排序会产生意外的结果
- 数组排序基于纯javascript搜索文本匹配
- Javascript自定义数组按数组排序
- 使用字符串按属性错误对对象进行数组排序
- 多维数组排序
- JavaScript与PHP在数组排序中的对比
- Javascript-关联数组排序