繁体   English   中英

根据定义的顺序对数组进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM