Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环通过JSON数据中的最小值和最大值(无jQuery)_Javascript_Json - Fatal编程技术网

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

Javascript 循环通过JSON数据中的最小值和最大值(无jQuery),javascript,json,Javascript,Json,在以下方面: 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

在以下方面:

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
如果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=数学最大应用数学,权重; console.logpeakWeight:+peakWeight

因为我只关注匹配用户的权重值,所以我假设它必须在'if-weighInData[obj]中运行{…',但这一尝试以及许多其他尝试进入和退出循环的尝试,包括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);
如果我要编辑您的代码,类似这样的操作可能会起作用:

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

在for循环期间,我建议将每个对象的权重值存储到一个与selUser匹配的数组对象中。在for循环之后,所有权重值都将在数组中,您应该可以很容易地从中找到最小/最大值。围绕此示例的代码会有帮助吗?@将感谢您,是的,确实是我的otherw的一个示例伊瑟痛苦地学习了,将代码作为上下文将不胜感激:干杯,svs@Will另外,你说:我建议将每个对象的权重值存储到一个与selUser匹配的数组对象中。这不是我要做的:var weights=JSON.parse[+weighInData[obj].weight+]?Thx,svsNo,您正在获取值并将其存储到一个变量中,该变量在每次我们找到匹配的对象时都会被覆盖。从下面的示例中,您可以将该变量的权重添加或推送到数组中。@Will啊,是的,谢谢您解释。是的,这正是我实现预编辑答案的方式。或者,arr.pushweighIn数据[obj]。重量,无需先设置“重量”变量。再次感谢,我也可以将其用于最小值。干杯!svsPerfect,很高兴我能提供帮助。