繁体   English   中英

循环通过JSON数据中的最小值和最大值(无jQuery)

[英]min & max of values in looped-thru JSON data (no jQuery)

在下面的:

function processResponse(response){
    var myObj = JSON.parse(response); // convert string to object
    var weighInData = myObj["WEIGH-INS"];
    var dataRows = document.getElementById("data-rows");
    dataRows.innerHTML = "";

    for (var obj in weighInData) {
        if (weighInData[obj].user === selUser) { // *
            var weights = JSON.parse("[" + weighInData[obj].weight + "]"); // convert to object
            var row = "<tr>" +
                            "<td class=\"date\">" + weighInData[obj].date + " </td>" +
                            "<td class=\"value\">" + weighInData[obj].weight + "</td>" +
                        "</tr>";
            var userDisplayEl = document.getElementById("user-display");
            userDisplayEl.innerHTML = weighInData[obj].user;
            output.innerHTML += row;
        } // if ... === selUser
    } // for var obj in weighInData
} // processResponse
  • if(weighInData [obj] .user === selUser){...返回以下内容(使用示例Ron):

    对象{user =“ Ron”,date =“ 2014-08-01”,weight =“ 192”}

    对象{user =“ Ron”,date =“ 2014-08-02”,weight =“ 195”}

    对象{user =“ Ron”,date =“ 2014-08-03”,weight =“ 198”} ...等等。

...所以我目前的问题是它所属的位置:var peakWeight = Math.max.apply(Math,weights); console.log(“ peakWeight:” + peakWeight);

因为我只关注匹配用户的权重值,所以我认为它必须在'if(weighInData [obj] .user === selUser){...'循环内和循环外,包括selUser中的for循环)都无法获得所需的结果。 实际上,即使数学函数未在“权重”中的每个值上运行(即不在循环内),而是仅在循环外运行,结果仍为不正确的值。

非常感谢您的见解,

svs

这是一个非常简单的示例,您可以调整以适合您的目的:

// create this array outside of for loop so it already exists
var arr = []; 

// test data
var a = { user:"Ron", date:"2014-08-01", weight:"192"};
var b = { user:"Ron", date:"2014-08-02", weight:"195"};
var c = { user:"Ron", date:"2014-08-03", weight:"198"};        

// within for loop, you should only need to push once (per loop)
arr.push( a.weight );
arr.push( b.weight );
arr.push( c.weight );

// after the loop ends, display loop, get max and display
alert(arr);
var peakWeight = Math.max.apply(null, arr);
var minWeight = Math.min.apply(null, arr);
alert("Max: " + peakWeight + " -- Min: " + minWeight);

http://jsfiddle.net/biz79/sb7zayze/

如果我要编辑您的代码,则可能会执行以下操作:

function processResponse(response){
    var myObj = JSON.parse(response); // convert string to object
    var weighInData = myObj["WEIGH-INS"];
    var dataRows = document.getElementById("data-rows");
    dataRows.innerHTML = "";

    // ADDED: create array
    var arr = [];  

    for (var obj in weighInData) {
        if (weighInData[obj].user === selUser) { // *
            var weights = JSON.parse("[" + weighInData[obj].weight + "]"); // convert to object

            // ADDED:  add to array
            arr.push(weights);

            var row = "<tr>" +
                            "<td class=\"date\">" + weighInData[obj].date + " </td>" +
                            "<td class=\"value\">" + weighInData[obj].weight + "</td>" +
                        "</tr>";
            var userDisplayEl = document.getElementById("user-display");
            userDisplayEl.innerHTML = weighInData[obj].user;
            output.innerHTML += row;
        } // if ... === selUser
    } // for var obj in weighInData

  // ADDED: after the loop ends, display loop, get max/min and display
  alert(arr);
  var peakWeight = Math.max.apply(null, arr);
  var minWeight = Math.min.apply(null, arr);
  alert("Max: " + peakWeight + " -- Min: " + minWeight);       

} // processResponse

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM