Что пойдет не так, если 77> 602?

#javascript #arrays #json

#javascript #массивы #json

Вопрос:

Что пойдет не так, если 77> 602? Я пробовал в IE, Firefox и Chrome

 function getMaxValue(data){
    var maxValue=0;
    for(var i=0;i<data.length;i  ){

        if(data[i].value>maxValue){
             console.log(data[i].value  ">" maxValue);
             maxValue=data[i].value;
         }
     }
console.log("MaxValue:" maxValue);
return maxValue;


}
  

Я получаю свои данные из json:

 [{
"keyword": "User: Allen-P",
"value": "602"
}, {
"keyword": "From: phillip.allen@enron.com",
"value": "598"
},
{
"keyword": "Date: 2001",
"value": "276"
},
{
"keyword": "Subject: Re:",
"value": "228"
},
{
"keyword": "Date: 2001 Apr",
"value": "77"
},
]
  

Необходимо добавить какое-то бесполезное описание для StackOverflow. Пожалуйста, помогите мне;). Файл json немного больше и просто пример.

Комментарии:

1. Вы сравниваете целые числа или строки?

2. if(parseInt(data[i].value)>MaxValue){ …

Ответ №1:

Строки сравниваются в алфавитном порядке, даже если они содержат числа. Символ '7' идет после символа '6' в алфавитном порядке, так что действительно, с точки зрения строк, "77" > "602" .

Решение состоит в том, чтобы сначала преобразовать их в числа:

     if(parseFloat(data[i].value) > maxValue){
  

Или для краткости, унарный оператор также сделает это:

     if( data[i].value > maxValue){
  

Ответ №2:

В данный момент вы сравниваете целое число со строкой, что ненадежно работает в этой ситуации.

Либо измените свой JSON и отмените кавычки значений, либо используйте вместо этого следующий код:

 function getMaxValue(data){
    var maxValue=0;
    for(var i=0;i<data.length;i  ){

        if(parseInt(data[i].value) > maxValue) {
             console.log(data[i].value  ">" maxValue);
             maxValue=data[i].value;
         }
    }
    console.log("MaxValue:" maxValue);
    return maxValue;
}
  

Также прочитайте это для справки.

Ответ №3:

Вам нужно использовать parseInt(значение, 10) для преобразования значения из строки в число