У меня есть несколько функций, которые делают одно и то же снова и снова, но с другими объектными данными, переданными из внешнего файла JSON. Эти данные называются Data1, Data2 и Data3, которые я объявил их как переменные Data1_Data, Data2_Data и Data3_Data.JavaScript: Объединение подобных функций
Мне интересно, как я могу объединить эти функции, чтобы я мог написать одну функцию, которая проходит в соответствующих объектах данных JSON.
Фоновая информация. Таким образом, функции проходят через внешний набор данных JSON (огромная сумма) и отображает n-ю информацию в назначенные идентификаторы. Каждая функция в настоящее время назначается конкретному объекту данных в файле JSON, как в примере: Data1, Data2 и Data3.
JSfiddle можно найти здесь https://jsfiddle.net/3mL0d6Lb/
<div class="Dboxes">
<span class="Title"> Data1/Data2 </span>
<div class="TableContainer">
<div class="Value">
<span id="Data1" class="metrics">##</span>
</div>
</div>
<div class="TableContainer">
<div class="Value">
<span id="Data2" class="metrics">##</span>
</div>
</div>
<div class="TableContainer">
<div class="Value">
<span id="Data3" class="metrics">##</span>
</div>
</div>
.Dboxes {
width: 140px;
height: 140px;
background: linear-gradient(#00395c 0%, #000000 50%, #00395c 100%);
padding-top: 2px;
padding-left: 2px;
display: inline-block;
margin: 0px 0px 1px 0px;
position:relative;
color: white;
}
.Value
{
text-align: center;
font-size: 1.0vw;
display: block;
margin-left: auto;
margin-right: auto;
position: relative;
}
.TableContainer
{
display: flex;
align-items:center;
height: 25px;
}
.TitleImage
{
width: 24px;
height: 24px;
margin-left: 5%;
}
.container {
height: 100%;
width: 100%;
display: inline-block;
}
JavaScripts
// Setting up the Json
var counter = 0; // Trial
var previous_value = null;
$(document).ready(function() {
$.ajaxSetup({ cache: false });
myJson();
});
// Below is the function to draw data from Json
function myJson() {
$.getJSON("Dataset.json", function (response) {
var i = 1380; //start demo at last hour of data.
var looping = setInterval(function() {
var TrialCount = response.length;
var Info = response[counter];
var Data1_Data = Info.Data1;
var Data2_Data = Info.Data2;
var Data3_Data = Info.Data3;
CompareData1();
CompareData2();
CompareData3();
function CompareData1() {
if (counter == 0) {
prev_Data1_Data = Data1_Data;
}
if (Data1_Data > prev_Data1_Data) {
if ((Math.abs(Data1_Data - prev_Data1_Data) >= prev_Data1_Data/2))
document.getElementById("Data1_img").src = "img/yeltri.png";
else if ((Math.abs(Data1_Data - prev_Data1_Data) <= prev_Data1_Data/2))
document.getElementById("Data1_img").src = "img/grnsqr.png";
}
else if (Data1_Data < prev_Data1_Data) {
if ((Math.abs(Data1_Data - prev_Data1_Data) >= prev_Data1_Data/2))
document.getElementById("Data1_img").src = "img/yeltriDn.png";
else if ((Math.abs(Data1_Data - prev_Data1_Data) <= prev_Data1_Data/2))
document.getElementById("Data1_img").src = "img/grnsqr.png";
}
prev_Data1_Data = Data1_Data;
}
function CompareData2() {
if (counter == 0) {
prev_Data2_Data = Data2_Data;
}
if (Data2_Data > prev_Data2_Data) {
if ((Math.abs(Data2_Data - prev_Data2_Data) >= prev_Data2_Data/2))
document.getElementById("Data2_img").src = "img/yeltri.png";
else if ((Math.abs(Data2_Data - prev_Data2_Data) <= prev_Data2_Data/2))
document.getElementById("Data2_img").src = "img/grnsqr.png";
}
else if (Data2_Data < prev_Data2_Data) {
if ((Math.abs(Data2_Data - prev_Data2_Data) >= prev_Data2_Data/2))
document.getElementById("Data2_img").src = "img/yeltriDn.png";
else if ((Math.abs(Data2_Data - prev_Data2_Data) <= prev_Data2_Data/2))
document.getElementById("Data2_img").src = "img/grnsqr.png";
}
prev_Data2_Data = Data2_Data;
}
function CompareData3() {
if (counter == 0) {
prev_Data3_Data = Data3_Data;
}
if (Data3_Data > prev_Data3_Data) {
if ((Math.abs(Data3_Data - prev_Data3_Data) >= prev_Data3_Data/2))
document.getElementById("Data3_img").src = "img/yeltri.png";
else if ((Math.abs(Data3_Data - prev_Data3_Data) <= prev_Data3_Data/2))
document.getElementById("Data3_img").src = "img/grnsqr.png";
}
else if (Data3_Data < prev_Data3_Data) {
if ((Math.abs(Data3_Data - prev_Data3_Data) >= prev_Data3_Data/2))
document.getElementById("Data3_img").src = "img/yeltriDn.png";
else if ((Math.abs(Data3_Data - prev_Data3_Data) <= prev_Data3_Data/2))
document.getElementById("Data3_img").src = "img/grnsqr.png";
}
prev_Data3_Data = Data3_Data;
}
document.getElementById("Data1").innerHTML = Data1_Data
document.getElementById("Data2").innerHTML = Data2_Data
document.getElementById("Data3").innerHTML = Data3_Data
counter++;
if (counter == TrialCount) clearInterval(looping);
}, 100);
});
};
Я не вижу, где вы указали такие переменные, как 'prev_Data1_Data'. Они глобальны? – RomanPerekhrest
в конце каждой функции, я объявил prev_Data1_data, указав Data1_Data – axchink
, что не является хорошей практикой. Что, если 'counter' не будет равно' 0' в первом условии в функции 'CompareData1'? Затем в следующем условии 'if (Data1_Data> prev_Data1_Data) {' он будет сравнивать 'Data1_Data' с необъявленной переменной' prev_Data1_Data'. – RomanPerekhrest