javascript - 将对象推入循环内的数组中
问题描述
几个小时以来,我一直在尝试破解这个,但我似乎真的无法成功。我正在尝试创建一个如下所示的 JSON 字符串,但是当将变量的值传递obj
给变量j
时,我得到的数组仅包含该循环的最后一个结果。
而不是得到如下结果:
[{machine: "hi"...}
{machine: "2"....}]
我正进入(状态:
[{machine: "2"...}
{machine: "2"....
and keep going with same value}]
我究竟做错了什么?
var return_json = function(){
var j = [];
var obj = {};
var td;
for(var i=1;i<tr.length;i++){
td = tr[i].getElementsByTagName("td");
obj['machine'] = td[0].innerHTML;
console.log(obj['machine']);
obj['day'] = td[1].getElementsByTagName("p")[0].innerHTML;
obj['night'] = td[2].getElementsByTagName("p")[0].innerHTML;
j.push(obj);
console.log(j);
}
return j;
};
console.log(save_limitation());
解决方案
您只是obj
在循环之前在变量中创建单个对象实例。在每次迭代中,您都会更新对象的属性并将相同的对象推送到您的数组中。
要修复它,请在每次迭代时在循环中创建一个新对象。
var return_json = function() {
var j = [];
var td;
for(var i = 1; i < tr.length; i++){
td = tr[i].getElementsByTagName("td");
j.push({
machine: td[0].innerHTML,
day: td[1].getElementsByTagName("p")[0].innerHTML,
night: td[2].getElementsByTagName("p")[0].innerHTML
});
}
return j;
};
推荐阅读
- sql - 在sql中分组后获取总百分比拆分
- mysql - 如果找不到数据,Mysql会添加临时列
- amazon-sagemaker - 如何使用 Estimator 在 sagemaker 中保存 model.tar.gz 文件
- javascript - JavaScript Dom 操作以删除文本
- azure-devops - 订阅 Microsoft Teams 中的服务挂钩时,有没有办法在 Azure Devops/Repos/Pipelines 生成的消息中获取 @提及?
- python - 在多个列表上嵌套 for 循环
- javascript - NodeJS 向前端发送 HTTP 代码状态
- appium - 在 Appium 中处理 iPhone 12 中的日期选择器
- rust - 将要构造的宏发送到哪个枚举变量
- php - 如何使用 PHP CURL 预先请求的代码创建容器 Azure 存储