javascript - 为什么这个函数只推送数组中的一项?
问题描述
function createBar() {
function datas(date, balance) {
this.date = date;
this.balance = balance;
}
var data = new datas(date.value, balance.value);
var balances = [];
balances.push(data);
balances.sort(function (a, b) {
return b.balance - a.balance;
});
var topMark = balances[0].balance;
var heightUnit = "px";
var heightCalculate = function (amt) {
var x = 100 / (topMark / amt);
var y = (400 / 100) * x;
return y;
};
balances.forEach(function (item, index, arr) {
var bars = document.createElement("div");
bars.classList.add('barclass');
bars.style.height = heightCalculate(item.balance) + heightUnit;
bars.style.top = 500 - heightCalculate(item.balance) + heightUnit;
graphContainer.appendChild(bars);
});
date.value = "";
balance.value = "";
}
.barclass {
width : 4px;
margin-right : 1px;
margin-left : 1px;
display : inline;
float : left;
position: relative;
}
上面的函数每次都创建相同高度的条(单击按钮),无论“平衡”属性的值如何,我认为它不会在数组中推送多个项目,这就是为什么它每次都创建相同高度的条的原因按钮被点击我不知道这是怎么回事你能发现错误吗?
解决方案
您的答案下方的评论之一是正确的,我对此表示赞同。这里只是关于@Strella 的意思的更多细节-
每次调用 createBar 函数时,都会重新声明 balances 变量并重新初始化为空数组。如果您希望该变量是持久的,您应该在该函数之外声明一个初始化它。以下是如何更新代码的示例:
var balances = []; // NEW balances declaration & initialization outside of the function
function createBar() {
function datas(date, balance) {
this.date = date;
this.balance = balance;
}
var data = new datas(date.value, balance.value);
//var balances = []; // NOTE: balances used to be re-initialized here
balances.push(data);
balances.sort(function(a,b){
return b.balance - a.balance;
});
var topMark = balances[0].balance;
var heightUnit = "px";
var heightCalculate = function(amt) {
var x = 100 / (topMark/amt);
var y = (400/100) * x;
return y;
};
balances.forEach(function(item, index, arr) {
var bars = document.createElement("div");
bars.classList.add('barclass');
bars.style.height = heightCalculate(item.balance) + heightUnit;
bars.style.top = 500 - heightCalculate(item.balance) + heightUnit;
graphContainer.appendChild(bars);
});
date.value = "";
balance.value = "";
}
另一方面,您的代码中可能还有另一个错误。目前尚不完全清楚您在这里的目标是什么,但我的直觉是您想将单个条形元素添加到条形图中。您还希望图表中的所有条都按升序(?)排序。我认为您最终会在这里做的就是每次创建新条时再次将所有条添加到图表中。您可能希望在 balances.forEach 代码块之前清空所有子项的图形容器。
推荐阅读
- selenium - 如何使用正确的相对 xpath 找到我的 web 元素
- mysql - 无法将数据从 express 传递到 ejs?
- java - 打印带有更多小数点的浮点数
- outlook - Outlook 在转发电子邮件时忽略条件注释
- c# - OnTriggerEnter2D 在 Unity 中调用了两次
- ios - 下载 HLS 内容未启动
- jquery - Jquery 在 webpack symfony encore 中定义版本
- sql - 从oracle中的两个不同表中将多行插入一个表中?
- javascript - 使用正则表达式删除奇数空格以在 char 数组中获得偶数个空格
- r - R - 根据因子分类