求js算法,对ids列进行排序,并且保证names列的值对应关系不变

sdfsf双方各 2013-09-04 03:04:53
<script type="text/javascript">
var ids=",1,5,2,8";
var names=",a,x,b,g";
//求以ids进行升序排列,并且保证和names的值的下标对应关系不变(即1-a,5-x,2-b,8-g)
//求得的结果如下:求js算法
ids=",1,2,5,8";
names=",a,b,x,g";
</script>
...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2013-09-04
  • 打赏
  • 举报
回复
用两个数组不方便,先合成一个对象的数组

var ids="16,5,244,8".split(',');
var names="a,x,b,g".split(',');
var arr = []; 
for(var i=0;i<ids.length;i++) arr[i]={id:ids[i],name:names[i]};
arr.sort(function (a,b){
	return a.id-b.id;
});
for(var i=0;i<arr.length;i++) {
	ids[i]=arr[i].id;
	names[i]=arr[i].name;
}
alert( ids )
alert( names )
潮起潮落 2013-09-04
  • 打赏
  • 举报
回复
稍作修改即可

<html>
<head>
<script type="text/javascript">
function sortnumber(a,b){
	return a[0] - b[0];
}
var ids=",16,5,2,8".split(',');
var names=",a,x,b,g".split(',');
  
for(var i=0;i<ids.length;i++) ids[i]=[ids[i],names[i]];
alert(ids[1]);
ids.sort(sortnumber);
for(var i=0;i<ids.length;i++) {
    names[i]=ids[i][1];
    ids[i]=ids[i][0];
}
alert( ids )
alert( names )

</script>
</head>
<body>
123
</body>
</html>
fzfei2 2013-09-04
  • 打赏
  • 举报
回复
引用 4 楼 jslang 的回复:
[quote=引用 1 楼 fzfei2 的回复:]

var ids=",1,5,2,8".split(',');
var names=",a,x,b,g".split(',');
 
for(var i=0;i<ids.length;i++) ids[i]=[ids[i],names[i]];
ids.sort();
for(var i=0;i<ids.length;i++) {
	names[i]=ids[i][1];
	ids[i]=ids[i][0];
}
alert( ids )
alert( names )
数字在两位以就会出错 var ids=",16,5,2,8"[/quote] 改成以数字排序

var ids=",1,16,2,8".split(',');
var names=",a,x,b,g".split(',');
 
for(var i=0;i<ids.length;i++) ids[i]=[ids[i],names[i]];
ids.sort(function(a,b){return a[0]-b[0] });
for(var i=0;i<ids.length;i++) {
	names[i]=ids[i][1];
	ids[i]=ids[i][0];
}
alert( ids )
alert( names )
潮起潮落 2013-09-04
  • 打赏
  • 举报
回复
#1的聪明
天际的海浪 2013-09-04
  • 打赏
  • 举报
回复
引用 1 楼 fzfei2 的回复:

var ids=",1,5,2,8".split(',');
var names=",a,x,b,g".split(',');
 
for(var i=0;i<ids.length;i++) ids[i]=[ids[i],names[i]];
ids.sort();
for(var i=0;i<ids.length;i++) {
	names[i]=ids[i][1];
	ids[i]=ids[i][0];
}
alert( ids )
alert( names )
数字在两位以就会出错 var ids=",16,5,2,8"
86y 2013-09-04
  • 打赏
  • 举报
回复
其实在排序 ids的时候同时把names的值也换一下位置就行了。 建议先转成数组再处理更方便些
潮起潮落 2013-09-04
  • 打赏
  • 举报
回复
1.自己写个普通冒泡去排序ids,在ids交换位置的时候也同时交换names的位置,相当于names就是个附庸 2.利用sort的传入参数(一个排序函数),有点麻烦,只是有个思路,未尝试
fzfei2 2013-09-04
  • 打赏
  • 举报
回复

var ids=",1,5,2,8".split(',');
var names=",a,x,b,g".split(',');
 
for(var i=0;i<ids.length;i++) ids[i]=[ids[i],names[i]];
ids.sort();
for(var i=0;i<ids.length;i++) {
	names[i]=ids[i][1];
	ids[i]=ids[i][0];
}
alert( ids )
alert( names )

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧