[英]Sorting an array according to defined order
我试图在数组中的所有项目进行排序items
按照指定的顺序string
。 我正在努力取得results
["first", "second", "third", "last"]
排序后。 起始数组具有随机顺序。
var string = "first;second;third;last", items = ["third", "first", "last", "second"], result = [], lastpos = 0, lastinsert = 0; for (var i = 0; i < items.length; i++) { var mypos = string.indexOf(items[i]), insertat; if (mypos > lastpos) { insertat = lastinsert } else { insertat = lastinsert + 1 } result.splice(insertat, 0, items[i]); lastpos = mypos; } document.getElementById("output").innerHTML = JSON.stringify(result);
<pre id="output"></pre>
我不是要进行文本分析来对数组进行排序。 该数组应仅遵循变量string
各项的顺序。
我假设您正在询问有关基于另一个的值/索引对数组进行排序的过程的更多信息。 否则,将没有理由进行排序。
您可以尝试将Array.prototype.sort()
与以下内容一起使用:
var string = "first;second;third;last".split(';'),
items = ["third", "first", "last", "second"],
result = [];
result = items.sort(function(a,b) {
return string.indexOf(a) - string.indexOf(b)
});
document.getElementById("output").innerHTML = JSON.stringify(result);
这是一个JSFiddle示例。
- 编辑 -
根据评论,这应该对性能更友好:
var string = "first;second;third;last".split(';'),
stringHash = {},
items = ["third", "first", "last", "second"],
result = [];
for (var i = 0, j = string.length; i < j; i++) {
stringHash[string[i]] = i;
}
result = items.sort(function(a,b) {
return stringHash[a] - stringHash[b];
});
document.getElementById("output").innerHTML = JSON.stringify(result);
您将添加一个额外的步骤,因此,如果原始数组较小,则可能不值得。 但是,如果数组较大,则执行效果会更好。
我不确定我是否理解正确,但是如果您的目标只是简单地按原始顺序获取这些元素的数组,则仅从原始字符串中重新分割将是最简单的:
var string = "a:test;a:second;b:third;a:last"; var result = string.split(';');
还是对未在代码段中描述的数据执行某些转换,实际上需要您取消对现有数组元素的排序?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.