嵌套的for循环总是显示最后的数据
Nested for loop always showing the last data
我有一个javascript代码:
var outerSet = [{date: '2016-12-12:00', value: 50}, {date: '2016-12-13:00', value: 50},
{date: '2016-12-14:00', value: 70}, {date: '2016-12-15:00', value: 50}];
var hourlyData = ['2016-12-13:01','2016-12-13:02','2016-12-13:03',
'2016-12-13:04','2016-12-13:05']
var iterator = 0;
var tempData = [];
for (var i = 0; i < outerSet.length; i++) {
var innerItem = outerSet[i];
if (innerItem.date === '2016-12-13:00') {
for (var j = 0; j < 4; j++) {
tempData[iterator] = innerItem;
tempData[iterator].date = hourlyData[j];
iterator++;
}
}
}
console.log('temp data', tempData);
我想让新的tempData数组的日期值具有像
这样的值[{date: '2016-12-12:01', value: 50},
{date: '2016-12-13:02', value: 50},
{date: '2016-12-14:03', value: 70},
{date: '2016-12-15:04', value: 50}];
但是它总是返回
[{date: '2016-12-12:04', value: 50},
{date: '2016-12-13:04', value: 50},
{date: '2016-12-14:04', value: 70},
{date: '2016-12-15:04', value: 50}];
这可能是一个关闭问题,但我无法找出问题所在。
这里是相同的小提琴:https://jsfiddle.net/nck66sre/
问题在这一行:
tempData[iterator] = innerItem;
在每次迭代中,将当前的tempData
数组元素赋值为相同的对象。因此,当循环结束时,数组中的所有四个元素都引用同一个对象。(所以实际上你的代码并没有输出你所说的。)
您需要在每次迭代中创建一个新对象:
tempData[iterator] = { date: hourlyData[j], value: innerItem.value };
在上下文:var outerSet = [{date: '2016-12-12:00', value: 50}, {date: '2016-12-13:00', value: 50},
{date: '2016-12-14:00', value: 70}, {date: '2016-12-15:00', value: 50}];
var hourlyData = ['2016-12-13:01','2016-12-13:02','2016-12-13:03',
'2016-12-13:04','2016-12-13:05']
var tempData = [];
for (var i = 0; i < outerSet.length; i++) {
var innerItem = outerSet[i];
if (innerItem.date === '2016-12-13:00') {
for (var j = 0; j < 4; j++) {
tempData.push({ date: hourlyData[j], value: innerItem.value });
}
}
}
console.log('temp data', tempData);
(注意:我已经使用了.push()
并删除了iterator
变量,但这只是通过整理的方式,它与您的问题无关。)
您需要根据您想要获得的内容更改条件。请参考此代码。
var outerSet = [{date: '2016-12-12:00', value: 50}, {date: '2016-12-13:00', value: 50},{date: '2016-12-14:00', value: 70},{date: '2016-12-15:00', value: 50}];
var hourlyData = ['2016-12-13:01','2016-12-13:02','2016-12-13:03','2016-12-13:04','2016-12-13:05']
var iterator = 0;
var tempData = [];
for (var i=0; i<outerSet.length; i++) {
var innerItem = outerSet[i];
for (var j = 0; j < 4; j++) {
if (innerItem.date === '2016-12-13:00') {
tempData[iterator] = innerItem;
tempData[iterator].date = hourlyData[j];
iterator++;
}
}
}
console.log('temp data', tempData);
var outerSet = [{date: '2016-12-12:00', value: 50}, {date: '2016-12-13:00', value: 50},{date: '2016-12-14:00', value: 70},{date: '2016-12-15:00', value: 50}];
var hourlyData = ['2016-12-13:01','2016-12-13:02','2016-12-13:03','2016-12-13:04','2016-12-13:05']
var iterator = 0;
var tempData = [];
for (var i=0; i<outerSet.length; i++) {
var innerItem = outerSet[i];
if (innerItem.date === '2016-12-13:00') {
for (var j = 0; j < 4; j++) {
//remember object get value by refference and you need create new object then add value for object property
tempData[iterator] = {};
tempData[iterator].value = innerItem.value;
tempData[iterator].date = hourlyData[j];
iterator++;
}
}
}
console.log(JSON.stringify(tempData));
英文翻译:所有指针都指向同一个对象
function createNew(date,value){
var obj ={
"date":date,
"value":value
};
return obj;
}
var outerSet = [{date: '2016-12-12:00', value: 40}, {date: '2016-12-13:00', value: 50},{date: '2016-12-14:00', value: 70},{date: '2016-12-15:00', value: 60}];
var hourlyData = ['2016-12-13:10','2016-12-13:20','2016-12-13:30','2016-12-13:40','2016-12-13:50'];
var tempData = new Array();
for (var i=0; i<outerSet.length; i++) {
var innerItem = outerSet[i];
if (innerItem.date == '2016-12-13:00') {
for (var j = 0; j < 4; j++) {
var tempOuter=createNew(hourlyData[j],innerItem.value);
tempData.push(tempOuter);
}
}
}
console.log('temp data', tempData);
相关文章:
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- 谷歌地图-数据库中的标记只显示最后一行的信息
- jQuery自定义验证只显示最后一个字段的错误
- 有角度的ng重复只显示最后一个元素.如果只有一个元素;我什么也不展示
- AngularJS:仅在最后一个选项卡上显示过滤的内容
- 使用 Apache 模块和 Javascript/jQuery 显示网页的最后修改日期
- 谷歌可视化散点图只显示最后一个系列的工具提示
- "重新打开最后一个关闭的选项卡“;导致显示最后一个ajax请求内容
- 单击DIV上的所有ID时如何显示最后一个ID
- 如何使用Selenium IDE存储和键入显示文本的最后一个单词
- 使用java脚本显示最后一次看到的网页状态
- 在JavaScript中,console.log给出了for循环的每个值.但是var.text只显示最后一个值.这是为什
- 谷歌地图:多个InfoWindows总是显示最后的值
- 通过Array的For循环只显示最后一个值
- D3 -在轴上只显示中间和最后的标记
- 要显示数据的最后一周和任何两个日期之间的数据,我正在努力
- 如何在最后一个选项卡中显示页面的填充表单值
- 我在一个对象中创建了两个不同的对象.在打印它们时,只显示最后修改的对象.如何创造
- 嵌套的for循环总是显示最后的数据
- For循环通过数组只显示最后的值,谷歌地图