#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) для преобразования значения из строки в число