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,很高兴我能提供帮助。