Javascript错误尝试提取obj1中的最大值

时间:2017-06-28 01:39:19

标签: javascript

.html文件的代码在这里:

<script>
n={}
obj1={}
obj1[Math.random()]={x:2}
obj1[Math.random()]={x:4}
obj1[Math.random()]={x:6}
for(i1 in obj1){for(i2 in obj1){if(obj1[i1].x>obj1[i2].x){max=obj1[i1].x}else{max=obj1[i2].x}}}
document.write(max)
</script>

执行该操作时,写入文档的值为6。

我换成了这个:

<script>
n={}
obj1={}
obj1[Math.random()]={x:2}
obj1[Math.random()]={x:6}
obj1[Math.random()]={x:4}
for(i1 in obj1){for(i2 in obj1){if(obj1[i1].x>obj1[i2].x){max=obj1[i1].x}else{max=obj1[i2].x}}}
document.write(max)
</script>

值为4 ...

解释一下obj1[i1].x大于obj1[i2].x的时刻。这很奇怪,因为我改为obj [i1]并且我没有定义obj1 [Math.random()]对象,这给了我一个错误

  

max未定义

什么?如果我再说max=obj1[i1].x,请再次max=obj1[i1].x重新 max=obj1[i1].x。 5可能小于3 ??

显然,我想运行我的程序并提供最好的obj1的x,但javascript不起作用。

2 个答案:

答案 0 :(得分:2)

您每次都会重新分配最多。您的代码看起来应该更像这样:

var max = -Infinity;
for(var i1 in obj1){if(obj1[i1].x>max){max=obj1[i1].x}}

这将节省您的循环时间并为您提供预期的结果。否则max是最后一次比较的最大值。

答案 1 :(得分:-1)

我终于得到了解决方案:

<script>
aux1=0
aux2=0
obj={}
length=20
for(i=0;i<length;i++){
 obj[i]=Math.floor(Math.random()*10)
}
for(i in obj){
 for(j in obj){
  if(obj[j]<obj[eval(j)+1]){
   aux1=obj[j]
   aux2=obj[eval(j)+1]
   obj[eval(j)+1]=aux1
   obj[j]=aux2
  }
 }
}
for(i in obj){
 document.write(obj[i])
}
alert("max is "+obj[0])
</script>

另一种解决方案是:

    <p id="demo"></p>
    <script>
    prev=0
    obj1={}
    obj1[Math.random()]={x:2}
    obj1[Math.random()]={x:4}
    obj1[Math.random()]={x:6}
    max=-Infinity
    for(i1 in obj1){if(obj1[i1].x>max){max=obj1[i1].x}}
    document.write(max)
    </script>