【问题标题】:Dynamically created object not populated as expected动态创建的对象未按预期填充
【发布时间】:2018-10-31 01:38:01
【问题描述】:

我正在尝试从一个对象中提取数据,重组并创建一个新对象。

源对象的简化示例

var res = [{
    DateTime: '00:00',
  Number: 1,
  WeekDay: 1
},
{
    DateTime: '00:00',
  Number: 4,
  WeekDay: 1
},
{
    DateTime: '00:00',
  Number: 1,
  WeekDay: 2
},
{
    DateTime: '00:30',
  Number: 1,
  WeekDay: 2
}]

从这里我想创建一个新对象,其中“数字”被求和 1. 平日 2. 半小时间隔

var intervals = ['00:00', '00:30']
var weekdays = [1, 2]

var target = []
var intervalObj = [];
    for (i = 0; i < intervals.length; i++) {
        intervalObj.push({
            interval: intervals[i],
            number: 0
        })
      }

 for (i = 0; i < weekdays.length; i++) {
 var day = i + 1;
        target.push({
                day: day,
            data: intervalObj,
        })
      }

然后像这样填充新对象:

for(var row in res) {
    var dt = res[row].DateTime;
  var wd = res[row].WeekDay;
  var wdidx = weekdays.indexOf(wd)
  var dtidx = intervals.indexOf(dt)
  var num = res[row].Number;

  target[wdidx].data[dtidx].number += num;
}

这在创建上述目标对象时不起作用。总和的结果在所有工作日以相同的时间间隔重复。 但是,当对象是静态的:

var target = [{
  day: 1,
  data: [{
    interval: '00:00',
    number: 0
  },
  {
    interval: '00:30',
    number: 0
}]
},
{
  day: 2,
  data: [{
    interval: '00:00',
    number: 0
  },
  {
    interval: '00:30',
    number: 0
  }]
}]

它按预期工作。我不知道为什么。 这是一个小提琴示例: https://jsfiddle.net/oceansmoving/wkfL9e3o/

【问题讨论】:

  • 有人吗?........

标签: javascript jquery oop


【解决方案1】:

在每个循环实例中,您对 data 使用相同的数组引用 intervalObj。需要为每个实例创建新数组

改变

var intervalObj = [];
for (i = 0; i < weekdays.length; i++) {
  var day = i + 1;
  target.push({
    day: day,
    data: intervalObj,
  })
}

//var intervalObj = [];
for (i = 0; i < weekdays.length; i++) {
  var day = i + 1;
  target.push({
    day: day,
    data: [],
  })
}

【讨论】:

  • 嗨,这是有意的。对于每个工作日,我希望重复所有半小时的间隔。
  • 那么我不明白具体问题是什么,尽管我认为您没有意识到使用相同的数组引用意味着对该数组的所有引用都会进行更改
  • 请查看 expexted 输出并与小提琴中记录到控制台的内容进行比较。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多