我不确定如何写问题标题或者问这个问题的正确方法是什么。
目标是,我目前正在从外部Json文件中提取数据,该文件包含大约700个或更多数据。我想要做的是,当循环遍历这些数据时,例如,数据1,数据2,数据3 ......等等,我希望将当前值与之前的值进行比较,如果它更大,则更小,或等于,然后做点什么
现在,我的代码就是这样编写的
function myJson() {
$.getJSON('JsonData.json', function (response) {
setInterval(function () {
var TrialCount = response.length;
updateTrack(X_Data);
var counter = 0;
var Info = response[counter];
var X_Data = Info.X_Json;
X_Data = X_Data.toFixed(2); // rounds to 2 decimal places
document.getElementById("DisplayX").innerHTML = X_Data
counter++;
}, 500);
});
};
function updateTrack(X_Data) {
$('#X').html(X_Data);
if (current X_Data < previous value){
document.getElementById("X_Data_img").src = "first image";
}
else if (current X_Data > previous value) {
document.getElementById("X_Data_img").src = "second image";
}
else {
document.getElementById("X_Data_img").src = "third image";
}
};
如何将当前X_Data(当前的Json数据循环)与之前的X_data(Json数据的前一个循环)进行比较? |
我拥有的Json数据的格式
var X_Json= {
"data1" : "#",
"data2" : "#",
"data3" : "#",
..
},
{
"data1" : "#",
"data2" : "#",
"data3" : "#",
..
},
{
"data1" : "#",
"data2" : "#",
"data3" : "#",
..
},
{
"data1" : "#",
"data2" : "#",
"data3" : "#",
..
}
答案 0 :(得分:0)
将Parse.Cloud.useMasterKey()
设置在var previous_value
范围之外,并使用当前updateTrack()
值将其设置在updateTrack()
的末尾。
X_Data
循环只是为了向您展示它是如何工作的,将循环的每次迭代想象为对var X_Data = [14,22,53,24,6,6,97];
var previous_value = null;
for (var i = 0; i < X_Data.length; i++) {
var current_value = X_Data[i];
if (i > 0) { // some sort of first item check
if (current_value < previous_value) {
// set first image
} else if (current_value > previous_value) {
// set second image
} else {
// set third image
}
}
previous_value = current_value;
}
的单独函数调用。
这是处理阵列内比较的一般模式,希望能帮助您找到答案。
为了帮助您确定代码的正确方向,您要执行的操作是在功能外设置updateTrack()
并将counter
与response[counter].X_Json
进行比较并设置图像并跳过如果response[counter - 1].X_Json
为0,则设置counter
的方式每次调用该函数时都会重置它。
答案 1 :(得分:0)
我假设你的JSON看起来像这样。
var myJson = {
"data1" : "2",
"data2" : "5",
"data3" : "43",
..
}
如果要循环遍历对象的所有属性,就好像它是一个数组一样,那么将所有属性名称作为字符串放在数组中。
var myProperties = Object.keys(myJson);
这将创建一个像这样的属性名称数组
["data1", "data2", "data3"....]
您可以遍历myProperties
并使用项目名称来标识myJson
对象中的属性。
for(var i = 1; i < myProperties.length ; i++) {
if(myJson[myProperties[i]] < myJson[myProperties[i-1]]) {
//Do something
} else if(myJson[myProperties[i]] > myJson[myProperties[i-1]]){
//Do another thing
} else {
//Do something else
}
}
答案 2 :(得分:-1)
也许我是误会,但只是试图循环你的json数据并将当前的数据与之前的数据进行比较?
$.getJSON('myurl', function (data) {
$.each(data, function (i, item) {
if (i > 0 && item.myval < data[i - 1].myval){
// do whatever
}
});
});