这样? <script type="text/javascript"> <!-- var t = [{n:"a",v:10},{n:"b",v:8},{n:"c",v:4},{n:"d",v:2},{n:"e",v:6}] t.sort(function(a,b){return b.v-a.v}); var tt = "" for (var i=0; i<3; i++) { tt+=t[i].n; } alert(tt); //--> </script>
变量放到一个对象中,可以用 for in 获取对象名称 var obj = {a:3,b:4,c:6}; for(var o in obj){ alert(o +"\n"+ obj[o]); }
其中R,I,A,S,E,C存储的是不确定的整数,都是变量。我把它放到arr数组里面,想获取排序后最大的前三个数的对象名,请问怎么获取啊? var arr=new Array(R,I,A,S,E,C); var obj={R:arr[0],I:arr[1],A:arr[2],S:arr[3],E:arr[4],C:arr[5]} function sortNumber(a, b) { return a - b } var mm=arr.sort(sortNumber); for(var i in mm){ alert(i+":"+mm[i]); }
刚学Javascript,说说思路并附上代码: 思路:定义对象直接量,把对象属性值存到数组中,利用数组的sort方法降序排列之后,再利用值索引到原对象的属性,最后输出。 代码: var orgnum={ "a":10, "b":8, "c":4, "d":2, "e":6 }; function sort(obj) { var orgarray=new Array(); var i=0; for (var name in obj) { orgarray[i]=obj[name]; i++; } for (name in obj) { document.write("属性名:"+name+""+"属性值:"+obj[name]+"<br/>"); } for (var j=0;j<orgarray.length;j++) { document.write("数组元素依次为:"+orgarray[j]+"<br/>"); } var sortedarray=orgarray.sort(function (x,y){return y-x;}); for (var k=0;k<sortedarray.length;k++) { document.write("排序之后的数组元素依次为:"+sortedarray[k]+"<br/>"); } for (var l=0;l<sortedarray.length;l++) { for (name in obj) { if (obj[name]==sortedarray[l]) document.write("从大到小排序之后的第"+(l+1)+"个元素是:"+name+"<br/>"); } } } sort(orgnum);
<script type="text/javascript">
<!--
var t = [{n:"a",v:10},{n:"b",v:8},{n:"c",v:4},{n:"d",v:2},{n:"e",v:6}]
t.sort(function(a,b){return b.v-a.v});
var tt = ""
for (var i=0; i<3; i++) {
tt+=t[i].n;
}
alert(tt);
//-->
</script>
变量放到一个对象中,可以用 for in 获取对象名称
var obj = {a:3,b:4,c:6};
for(var o in obj){
alert(o +"\n"+ obj[o]);
}
var arr=new Array(R,I,A,S,E,C);
var obj={R:arr[0],I:arr[1],A:arr[2],S:arr[3],E:arr[4],C:arr[5]}
function sortNumber(a, b)
{
return a - b
}
var mm=arr.sort(sortNumber);
for(var i in mm){
alert(i+":"+mm[i]);
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<script>
var R=5,I=3,A=78,S=65,E=7,C=10;
var arr = [
{variables:"R",value:R},
{variables:"I",value:I},
{variables:"A",value:A},
{variables:"S",value:S},
{variables:"E",value:E},
{variables:"C",value:C}
];
arr.sort(function(a,b){ return b.value-a.value;})
for(var i=0;i<arr.length;i++)
document.write('key:'+arr[i].variables+' value:'+arr[i].value+'<br>');
</script>
</body>
</html>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<title>无标题文档</title>
<script type="text/javascript">
var data = {a:10,b:8,c:4,d:2,e:6,g:11,f:4};
var arr = [];
for(var i in data){
if(arr[data[i]]!=""&&arr[data[i]]!=undefined){
arr[data[i]]+=","+i
}else{
arr[data[i]]=i;
}
}
for(var i=arr.length-1;i>=0;i--){
if(arr[i]!=""&&arr[i]!=undefined){
document.write(arr[i]);
document.write(",");
}
}
</script>
</head><body></body>
</html>
思路:定义对象直接量,把对象属性值存到数组中,利用数组的sort方法降序排列之后,再利用值索引到原对象的属性,最后输出。
代码:
var orgnum={
"a":10,
"b":8,
"c":4,
"d":2,
"e":6
};
function sort(obj)
{
var orgarray=new Array();
var i=0;
for (var name in obj)
{
orgarray[i]=obj[name];
i++;
}
for (name in obj)
{
document.write("属性名:"+name+""+"属性值:"+obj[name]+"<br/>");
}
for (var j=0;j<orgarray.length;j++)
{
document.write("数组元素依次为:"+orgarray[j]+"<br/>");
}
var sortedarray=orgarray.sort(function (x,y){return y-x;});
for (var k=0;k<sortedarray.length;k++)
{
document.write("排序之后的数组元素依次为:"+sortedarray[k]+"<br/>");
}
for (var l=0;l<sortedarray.length;l++)
{
for (name in obj)
{
if (obj[name]==sortedarray[l])
document.write("从大到小排序之后的第"+(l+1)+"个元素是:"+name+"<br/>");
}
}
}
sort(orgnum);
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<script>
var R=5,I=3,A=78,S=65,E=7,C=10;
var arr = [
{variables:"R",value:R},
{variables:"I",value:I},
{variables:"A",value:A},
{variables:"S",value:S},
{variables:"E",value:E},
{variables:"C",value:C}
];
arr.sort(function(a,b){ return b.value-a.value;})
var words = [];
for(var i=0;i<3;i++)
if(arr[i]&&arr[i].variables)words.push(arr[i].variables);
document.write('前三个存在数组里,是:[' + words + '];');
</script>
</body>
</html>给楼主存到数组里了。
8楼的剑走偏锋,其实很巧妙。
<html>
<head>
<script type="text/javascript">
//8楼方法:
//利用对象的属性值作为新建数组的元素的下标,而属性值对应的属性名则作为下标对应的值,只要按照下标从大到小的顺序排列,即可将属性名列出。
//但这样做给数组中引入过多无谓的undefined数据,造成了空间的浪费。
function sort_floor8()
{
var data = {a:10,b:8,c:4,d:4,e:6,g:11,f:4,h:10000000};
var arr = [];
for(var i in data)
{
if(arr[data[i]]!=""&&arr[data[i]]!=undefined)
{
arr[data[i]]+=","+i
}
else
{
arr[data[i]]=i;
}
}
for(var i=arr.length-1;i>=0;i--)
{
if(arr[i]!=""&&arr[i]!=undefined)
{
document.write(arr[i]);
document.write(",");
}
}
}
//14楼方法:
function sort_floor14()
{
var R=5,I=3,A=78,S=65,E=7,C=10,H=10000000;
var arr = [
{variables:"R",value:R},
{variables:"I",value:I},
{variables:"A",value:A},
{variables:"S",value:S},
{variables:"E",value:E},
{variables:"C",value:C},
{variables:"H",value:H}
];
arr.sort(function(a,b){ return b.value-a.value;})
var words = [];
for(var i=0;i<3;i++)
if(arr[i]&&arr[i].variables)words.push(arr[i].variables);
document.write('前三个存在数组里,是:[' + words + '];');
} function test(fun)
{
var before_time=new Date();
fun();
var after_time=new Date();
document.write("运行时间是:"+(after_time-before_time)+" ms.<br/>");
}
</script>
</head>
<body>
<input type="button" id="button1" value="8楼排列方法测速" onclick="test(sort_floor8);">
<br/>
<input type="button" id="button1" value="14楼排列方法测速" onclick="test(sort_floor14);">
</body>
</html>测试结果:
FF3.6下
8楼速度:3539 ms.
14楼速度:12 ms.
IE6下
8楼速度:10031 ms.
14楼速度:1 ms.