Javascript 向数组中添加字母排序字符
基本上,我已经整理了一系列客户名称:Javascript 向数组中添加字母排序字符,javascript,knockout.js,Javascript,Knockout.js,基本上,我已经整理了一系列客户名称: Al K. Seltzer Alf A. Romeo Ali Gaither, Ali Katt Amber Green Cam Payne Cara Van Craven Moorehead Crystal Ball Crystal Claire Waters Ford Parker Forrest Green Foster Child 我想添加排序字符: **A** Al K. Seltzer Alf A. Romeo Ali Gaither, Ali
Al K. Seltzer
Alf A. Romeo
Ali Gaither, Ali Katt
Amber Green
Cam Payne
Cara Van
Craven Moorehead
Crystal Ball
Crystal Claire Waters
Ford Parker
Forrest Green
Foster Child
我想添加排序字符:
**A**
Al K. Seltzer
Alf A. Romeo
Ali Gaither, Ali Katt
Amber Green
**C**
Cam Payne
Cara Van
Craven Moorehead
Crystal Ball
Crystal Claire Waters
**F**
Ford Parker
Forrest Green
Foster Child
我目前的做法是:
function addSortigChars(elements) {
var lastChar=elements[0].LastName.substring(0,1).toUpperCase();
var newArray=[];
newArray.push(lastChar);
for(var i=0;i<elements.length;i++) {
var newChar=elements[i].LastName.substring(0,1).toUpperCase();
if(newChar!=lastChar) {
lastChar=newChar;
newArray.push(lastChar);
}
newArray.push(elements[i]);
}
return(newArray);
}
函数addSortigChars(元素){
var lastChar=elements[0].LastName.substring(0,1).toUpperCase();
var newArray=[];
newArray.push(lastChar);
对于(var i=0;i您是对的,删除每个元素不是最有效的解决方案,但我认为优化它所带来的性能好处不值得增加复杂性
但是,如果你真的想优化它,你可以!你可以先为每个字母设置一个条目数量的估计值,例如,如果你有1000个元素,你可以估计以A开头的名称大约是100个。
然后,你可以使用二进制搜索的一个版本来查找从B开始的第一个名字,在0, 200的范围内。记住,200是一个软限制,如果你的估计很差,所有的名字在100和200之间从A开始,你需要考虑通过它。事实上,我会用最大值作为(估计+最大已知A)。并在发现更大的a时进行更新。
一旦找到第一个B===必须插入B的位置,然后继续下一个字母
通过使用(修改过的)二进制搜索,可以保证跳过大多数元素。效率部分取决于估计的准确性
祝实施顺利
原始算法的一种更清晰的实现,可在适当位置更改阵列:
function addSortingChars(elements) {
var last = '';
for (var i=0; i<elements.length; i++) {
if (elements[i][0].toUpperCase() !== last) {
last = elements[i][0].toUpperCase();
elements.splice(i, 0, last);
}
}
}
函数添加排序字符(元素){
var last='';
对于(var i=0;i,可以向后迭代数组
如果您记录您的arr
:
["***A***", "Al K. Seltzer", "Alf A. Romeo", "Ali Gaither, Ali Katt", "Amber Green", "***C***", "Cam Payne", "Cara Van", "Craven Moorehead", "Crystal Ball", "Crystal Claire Waters", "***F***", "Ford Parker", "Forrest Green", "Foster Child"]
["***A***", "Al K. Seltzer", "Alf A. Romeo", "Ali Gaither, Ali Katt", "Amber Green", "***C***", "Cam Payne", "Cara Van", "Craven Moorehead", "Crystal Ball", "Crystal Claire Waters", "***F***", "Ford Parker", "Forrest Green", "Foster Child"]