2014-11-19 3 views
0

Я хочу использовать значение MIN и MAX aht_value от моего json_encoded для использования в моей функции JavaScript? Как это достижимо?Fetch MIN и значение MAX из массива для функции JS?

благодарит заранее.

Массив:

[{ 
    "username":"OXGOR", 
    "aht_value":"241", 
    "station":"B20" 
    } 
    { 
    "username":"AISAI2", 
    "aht_value":"199", 
    "station":"B21" 
    }, 
    { 
    "username":"CAPAP3", 
    "aht_value":"NA", 
    "station":"B10" 
    }] 

map.php - JS, где все будет выводиться в конце

<script type="text/javascript"> 
$(document).ready(function() { 
       $('#aht').click(function(){ 
        $.ajax({ 
        type:"GET", 
        url : "show_aht.php", 
        data:{ } , // do I need to pass data if im GET ting? 
        dataType: 'json', 
        success : function(data){ 
         //going through all DIVs only once with this loop 
          for(var i = 0; i < data.length; i++) { // loop over results 
          var divForResult = $('#desk_' + data[i]['station']); // look for div for this object 
          if(divForResult.length) { // if a div was found 
           divForResult.html(data[i]['aht_value']).css("background-color", colorMe(data[i]['aht_value'])); 
          }//end if 
          }//end for 
        }//end success 
       });//end ajax 
       });//end click 
      });//end rdy 

map.php - JS: Я хочу поставить MIN и MAX aht_value здесь вместо 100 и 1800, но не работает

//get MIN value from the array 
    var min = Math.min.apply(null, a.map(function(x) { 
     var n = parseFloat(x.aht_value); 
     return isNaN(n) ? 9007199254740992 : n; 
    })); 

    //get MAX value from the array    
    var max = Math.max.apply(null, a.map(function(x) { 
     var n = parseFloat(x.aht_value); 
     return isNaN(n) ? 0 : n; 
    })); 

    //function for calculation of background color depending on aht_value    
    function conv(x){ 
     return Math.floor((x - 100)/(1800 - 100) * 255); 
    } 

    //function for background color 
    function colorMe(v){ 
     return "rgb(" + conv(v) + "," + (255-conv(v)) + ",0)"; 
    } 
</script> 

show.php: wh прежде чем я использую json_encode

$result = array(); 
    foreach ($memo as $username => $memodata) { 
    if (in_array($username, array_keys($user))) { 
    // Match username against the keys of $user (the usernames) 
    $userdata = $user[$username]; 
    //if AHT is null give N/A as value 
    if (is_null($memodata['aht_value'])) { 
     $result[] = array('username' => $userdata['username'], 
              'aht_value' => 'NA', 
              'station' => $userdata['station'] 
              ); 
    }//end inner if 
    //else give the actual value of AHT without the decimals 
    else { 
     $result[] = array('username' => $userdata['username'], 
          'aht_value' => substr($memodata['aht_value'],0,-3), 
          'station' => $userdata['station'] 
              ); 
echo json_encode($result); 

ответ

1

Вы можете использовать array.map() в сочетании с array.apply(), чтобы сделать простой код для вычисления минимального и максимального значения из вашего массива объектов. В вашем случае это немного сложнее, потому что у вас есть нечисловые значения, которые необходимо отфильтровать.

var a = [ 
 
    { 
 
    "username":"OXGOR", 
 
    "aht_value":"241", 
 
    "station":"B20" 
 
    }, 
 
    { 
 
    "username":"AISAI2", 
 
    "aht_value":"199", 
 
    "station":"B21" 
 
    }, 
 
    { 
 
    "username":"CAPAP3", 
 
    "aht_value":"NA", 
 
    "station":"B10" 
 
    } 
 
]; 
 

 
function minAHT(objArray) { 
 
    return Math.min.apply(null, objArray.map(function(x) { 
 
    var n = parseFloat(x.aht_value); 
 
    return isNaN(n) ? 9007199254740992 : n; 
 
    })); 
 
} 
 
    
 
function maxAHT(objArray) { 
 
    return Math.max.apply(null, objArray.map(function(x) { 
 
    var n = parseFloat(x.aht_value); 
 
    return isNaN(n) ? 0 : n; 
 
    })); 
 
} 
 

 
var min = minAHT(a); 
 
var max = maxAHT(a); 
 

 
alert("min: " + min + " max: " + max);

+0

привет, как можно получить MIN и MAX из вашего решения и заменить его значениями 100 и 1800 для моей функции «conv (x)» заранее спасибо – alda1234

+0

Я обновил свою треску e с функциями, которые должны быть проще для повторного использования. Вы захотите передать новые переменные в функцию с этими значениями. См. [Эту скрипку] (http://jsfiddle.net/7eser4L0/) для примера. – dave

0

Поскольку вы уже перебор набор результатов в PHP, я хотел бы предложить несколько вариантов. Вы можете либо отсортировать массив в PHP beofre return, так что значение min можно получить в js, посмотрев на arrayFromJson[0].aht_value и max на arrayFromJson[arrayFromJson.length - 1].aht_value. Или вы можете получить значение min.max при переборе массива и отправить их в качестве дополнительных данных в формате JSON, например, что вы JSON может выглядеть

{ 
    aht_min: XXX, 
    aht_max: XXX, 
    records: [ 
     { 
      "username":"OXGOR", 
      "aht_value":"241", 
      "station":"B20" 
     }, 
     ... 
    ] 
} 

Конечно, вы всегда можете перебирать массив, который является производным от JSON в javascript для определения значений min/max, но это похоже на ненужные накладные расходы, если вы просто делаете это на сервере.

0

Вы можете захватить min и max в одном и том же режиме, чтобы сохранить там некоторое время выполнения. Если такого рода вещи нужно сделать совсем немного или в нескольких местах, вероятно, лучше сделать это на бэкэнде, как предлагает Майк.

var data = [ 
 
    { 
 
    "username":"OXGOR", 
 
    "aht_value":"241", 
 
    "station":"B20" 
 
    }, 
 
    { 
 
    "username":"AISAI2", 
 
    "aht_value":"199", 
 
    "station":"B21" 
 
    }, 
 
    { 
 
    "username":"CAPAP3", 
 
    "aht_value":"NA", 
 
    "station":"B10" 
 
    } 
 
]; 
 

 
var minMax = function(dataSet) { 
 
    var min = null, max = null, i, len; 
 
    for (i = 0, len = dataSet.length; i < len; ++i) { 
 
    var data = dataSet[i], value = parseInt(data.aht_value); 
 
    if (isNaN(value)) { 
 
     continue; 
 
    } 
 

 
    if (min == null || value < min) { 
 
     min = value; 
 
    } 
 
    if (max == null || value > max) { 
 
     max = value; 
 
    } 
 
    } 
 
    return {min: min, max: max}; 
 
}; 
 

 
alert(JSON.stringify(minMax(data)));

+0

привет, как можно получить MIN и MAX из вашего решения и заменить его значениями 100 и 1800 для моей функции «conv (x)» заранее спасибо – alda1234

+0

Если вы хотите заменить значения в исходный массив, то вы хотите отслеживать индекс минимальных и максимальных элементов, не обязательно значение. Если вы хотите использовать min и max вместо этих чисел (это не совсем ясно в вашем комментарии здесь, что вы хотите), вы бы просто получили доступ к значениям «.min» и «.max» возврата из функции вызов. –

0

передача JSON объект функции MAXVAL и MINVAL. В функции успеха вы можете использовать данные как:

function maxVal(data) { 
    var max, k; // don't set max=0, because keys may have values < 0 
    //go through single key 
    for (var key in data) { if (data.hasOwnProperty(key)) { max = parseInt(data[key]); break; }} 
    //go through all keys 
    for (var key in data) { if (data.hasOwnProperty(key)) { if((k = parseInt(data[key])) > max) max = k; }} 

var min, m; // don't set max=0, because keys may have values < 0 
    //go through single key 
    for (var key in data) { if (data.hasOwnProperty(key)) { min = parseInt(data[key]); break; }} 
    //go through all keys 
    for (var key in data) { if (data.hasOwnProperty(key)) { if((m = parseInt(data[key])) < min) min = m; }} 

//finally both max and min has maximum and minimum value 
} 

ИЛИ вы можете сортировать и получить первый и последний объект по ключевому Валу

function sortByAttribue(d, attribute) { 
    return d.sort(function(a,b) { 
    return a[attribute] < b[attribute]; 
    }); 
} 

sortByAttribue(data, "aht_value") 

Теперь получить первое значение ключа «aht_value» ОТ первый объект и последний объект

Смежные вопросы