gpt4 book ai didi

JavaScript。尝试简化代码,也许使用循环?

转载 作者:行者123 更新时间:2023-12-04 17:56:37 25 4
gpt4 key购买 nike

我对编码还很陌生,我一直在研究 charts.js。我有将数据插入 de chart 的功能,但我必须对每个数据数组重复 push 方法和 if,到目前为止只有两个数据集,但我打算添加更多,但我不想拥有如果有 15 个数据集,每次都重复一些代码。我确信有一种更简单的方法可以做到这一点,也许使用循环、forEach 和 .map?但我对 javaScript 的掌握还不够,无法让它发挥作用。非常感谢一些帮助。

这是我要简化的功能:

function add_data(chart, labels, data) {
var today = new Date();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();

graficaConexiones.data.datasets[0].data.push(randomData());
graficaConexiones.data.datasets[1].data.push(randomData());
graficaConexiones.data.labels.push(time);

if (graficaConexiones.data.datasets[0].data.length > dataLength) {
graficaConexiones.data.datasets[0].data.shift();
}

if (graficaConexiones.data.datasets[1].data.length > dataLength) {
graficaConexiones.data.datasets[1].data.shift();
}

if (graficaConexiones.data.labels.length > labelLength) {
graficaConexiones.data.labels.shift()
}

graficaConexiones.update();
}
setInterval(add_data, 5000);

我尝试在函数内部执行此操作,但我卡在那里,不知道如何继续。

    var dataGraph = graficaConexiones.data.datasets

for (let i = 0; i < dataGraph.length; i++) {
console.log(dataGraph[i]);
}

这是完整的 javascript 页面:

var randomData = function () {
return Math.round(Math.random() * 10);
};

var dataLength = 10;
var labelLength = 10;

var today = new Date();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();


var ctx = document.getElementById("graficaConexiones");
var graficaConexiones = new Chart(ctx, {
type: 'line',
data: {
labels: ['', '', '', '', '', '', '', '', '', ''],
datasets: [{
label: "Total conexiones",
data: [null, null, null, null, null, null, null, null, null, null],
borderColor: "#DD0000",
backgroundColor: "#DD0000",
fill: false
},
{
label: "Total entrantes",
data: [null, null, null, null, null, null, null, null, null, null],
borderColor: "#1E90FF",
backgroundColor: "#1E90FF",
fill: false
},
]
},
options: {
responsive: true,
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
},
title: {
display: true,
text: 'Número de conexiones'
}
}
});

function add_data(chart, labels, data) {
var today = new Date();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();

graficaConexiones.data.datasets[0].data.push(randomData());
graficaConexiones.data.datasets[1].data.push(randomData());
graficaConexiones.data.labels.push(time);

if (graficaConexiones.data.datasets[0].data.length > dataLength) {
graficaConexiones.data.datasets[0].data.shift();
}

if (graficaConexiones.data.datasets[1].data.length > dataLength) {
graficaConexiones.data.datasets[1].data.shift();
}

if (graficaConexiones.data.labels.length > labelLength) {
graficaConexiones.data.labels.shift()
}

graficaConexiones.update();
}
setInterval(add_data, 5000);

和 html:

<!DOCTYPE html>
<html>
<head>
<title>Conexiones</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="wrapper">
<h1>Conexiones</h1>
<h2>Número de conexiones</h2>

<canvas id="graficaConexiones" width="1600" height="900"></canvas>
</div>

<script src="lineChart.js"></script>
</body>
</html>

最佳答案

只是 forEachgraficaConexiones.data.datasets 数组上:

graficaConexiones.data.datasets.forEach(({ data }) => {
data.push(randomData());
if (data.length > dataLength) {
data.shift();
}
});

完整:

function add_data() {
const { labels, datasets } = graficaConexiones.data;
var today = new Date();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
labels.push(time);
if (labels.length > labelLength) {
labels.shift();
}
datasets.forEach(({ data }) => {
data.push(randomData());
if (data.length > dataLength) {
data.shift();
}
});
}

或者,如果您对解构不满意:

function add_data() {
const labels = graficaConexiones.data.labels;
const datasets = graficaConexiones.data.datasets;
var today = new Date();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
labels.push(time);
if (labels.length > labelLength) {
labels.shift();
}
datasets.forEach((dataset) => {
const data = dataset.data;
data.push(randomData());
if (data.length > dataLength) {
data.shift();
}
});
}

首先将重复的属性访问提取到变量中确实有助于减少重复代码。

由于您没有向 add_data 传递任何参数,因此从其定义中删除所有参数。

关于JavaScript。尝试简化代码,也许使用循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59370231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com